Java longTime 和C#日期转换(结构+运算符重载)
前几天,因为工作原因,连到了公司的一个java系统。查看数据的时候,突然整个人都不好了,数据库中日期字段时间为毛都是整型?之前从来没有接触过java,所心就趁机了解了一下。原来,在数据库中,保存的是java中的System.currentTimeMillis()。这个返回是从1970年1月1日0时0分0秒起到现在的毫秒数,并且这是个UTC时间。明白了为什么是整型的,而我是用的.net mvc,要想正确显示出时间,还需要做一定的转换,然后就想到了一种最简单的方法,写一个通用的方法,把这个整型转换成.net的DateTime.
从网上扒了一个方法:http://blog.csdn.net/dragonpeng2008/article/details/8681435
public static DateTime? ConvertJavaDateTimeToNetTime(long time_JAVA_Long)//java长整型日期,毫秒为单位
{
DateTime dt_1970 = new DateTime(, , , , , );
long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
long time_tricks = tricks_1970 + time_JAVA_Long * ;//日志日期刻度
DateTime dt = new DateTime(time_tricks).AddHours();//转化为DateTime
return dt;
}
然后自己封装一下,可直接用。
以后碰到java的long time,直接使用DateTime dt=ConvertJavaDateTimeToNetTime(1207969641193);这样使用即可。
问题解决了。
但是,如果经常碰到这样的问题,我每次都要调用这个方法,是不是很low?
想想,即然java有很多系统中,时间都是用这这种方式保存的,我们可不可以,自定义一种类型。专门在.net系统中,作为java的long time类型?
即然到这里了,就得想一个更好的方法:结构体+运算符重载
并于结构体和运算符重载,网上有很多基础的介绍,但是一般的项目中确很少用得到,基本上平时都是用类代替了(其实这种是错误的,但是平时也没有太在意)。
我们就来试一试:
public struct JavaLongDateTime
{
/// <summary>
/// java中的currentTimeMillis
/// </summary>
public long JavaTimeMillis { get; set; } /// <summary>
/// 转换成.net DateTime后的日期对像
/// </summary>
public DateTime Value
{
get
{
return ConvertToDateTime();
}
} public JavaLongDateTime(long javaMillis)
{
JavaTimeMillis = javaMillis;
}
#region 两个JavaLongDateTime 相加减
public static JavaLongDateTime operator +(JavaLongDateTime o1, JavaLongDateTime o2)
{
JavaLongDateTime r = new testConsole.JavaLongDateTime();
r.JavaTimeMillis = o1.JavaTimeMillis + o2.JavaTimeMillis;
return r;
}
public static JavaLongDateTime operator -(JavaLongDateTime o1, JavaLongDateTime o2)
{
JavaLongDateTime r = new testConsole.JavaLongDateTime();
r.JavaTimeMillis = o1.JavaTimeMillis - o2.JavaTimeMillis;
return r;
}
#endregion #region JavaLongDateTime与整数 相加减
public static JavaLongDateTime operator +(JavaLongDateTime o1, long _javaMillis)
{
JavaLongDateTime r = new testConsole.JavaLongDateTime();
r.JavaTimeMillis = o1.JavaTimeMillis + _javaMillis;
return r;
}
public static JavaLongDateTime operator -(JavaLongDateTime o1, long _javaMillis)
{
JavaLongDateTime r = new testConsole.JavaLongDateTime();
r.JavaTimeMillis = o1.JavaTimeMillis - _javaMillis;
return r;
}
#endregion // 隐式转换
//long f = o1;
public static implicit operator long(JavaLongDateTime o1)
{
return o1.Value.Ticks;
} // 显式转换
//JavaLongDateTime javaDateTime = (JavaLongDateTime)javaMillis;
public static explicit operator JavaLongDateTime(long javaMillis)
{
return new JavaLongDateTime(javaMillis);
}
private DateTime ConvertToDateTime()
{
DateTime dt_1970 = new DateTime(, , , , , );
long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
long time_tricks = tricks_1970 + JavaTimeMillis * ;//日志日期刻度
DateTime dt = new DateTime(time_tricks).AddHours();//转化为DateTime
return dt;
}
public override string ToString()
{
return this.Value.ToString();
}
}
完成上面的代码,我们再写一个测试方法:
public class Program
{
public static void Main(string[] args)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); long javaTimeMillis_1 = ;
JavaLongDateTime javaDateTime = new JavaLongDateTime(javaTimeMillis_1);
Console.WriteLine("Java中System.currentTimeMillis:" + javaTimeMillis_1);
Console.WriteLine("==>转换成.net DateTime:" + javaDateTime.Value.ToString());
Console.WriteLine("直接输出:" + javaDateTime.ToString()); Console.WriteLine("*****************************************");
Console.WriteLine("测试显示式转换和隐式转换");
long javaTimeMillis_2 = ;
JavaLongDateTime javaDateTime1 = (JavaLongDateTime)javaTimeMillis_2;//测试显式转换,直接从Long转换成我们自定义的JavaLongDateTime
Console.WriteLine("Java中System.currentTimeMillis:" + javaTimeMillis_2);
Console.WriteLine("==>转换成.net DateTime:" + javaDateTime1.Value.ToString()); long tick = javaDateTime1;//测试隐式转换,将自定义的JavaLongDateTime 转换成为.net的Ticks
Console.WriteLine("转换成.net DateTime Ticks:" + tick); Console.ReadLine();
}
}
运行测试一下:

成功!
上面代码没有加上 异常捕获。
Java longTime 和C#日期转换(结构+运算符重载)的更多相关文章
- Java longTime 和C#日期转换
封装一下,可直接用. 以后碰到java的long time,直接使用DateTime dt=ConvertJavaDateTimeToNetTime(1207969641193);这样使用即可. 这串 ...
- Java Date,long,String 日期转换
1.java.util.Date类型转换成long类型java.util.Date dt = new Date();System.out.println(dt.toString()); //java. ...
- 时间日期转换工具类,获取当前时间YYYYMMDD24HHMISS、YYYYMMDDHHMISS
YYYYMMDD24HHMISS:24小时制时间(显示上只是比YYYYMMDDHHMISS中间多了一个24),例:2018102224112440 YYYYMMDDHHMISS:12小时制时间,例20 ...
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- java中的日期转换
在java中有两种Date对象,一种是java.sql.Date,另一种是java.util.Date 一.java.sql.Date对象: 这种Date对象使用了进行数据库操作的,它对应了数据库中的 ...
- 日期转换工具类 CommUtil.java
package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...
- 日期转换类 DateConverter.java
package com.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.D ...
- java日期转换
在java开发过程中,时间的转换时必须掌握的=========下面把时间转换做个总结,有可能不是很全面 时间格式只有两种 yyyy-MM-DD yyyy/MM/DD 时间的类型:字符串类型.sql类型 ...
随机推荐
- Codeforces Round #309 (Div. 1) C. Love Triangles dfs
C. Love Triangles Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/553/pro ...
- or1200下raw-os学习(任务篇)
这次就来说说基于上一节介绍的系统框图去建立我们所需要的任务,顺便学习Raw-OS提供的API,根据上节的分析,对于Slave Board有如下设计: Slave Board有三个任务,分别负责测试阻抗 ...
- TP复习10
i * { padding:0; margin:0; } 居中 ## ThinkPHP 3.1.2 模板中的变量#讲师:赵桐正微博:http://weibo.com/zhaotongzheng 本节课 ...
- Ubuntu15.04 安装Android开发环境
一.安装Java SE JKD A.下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSite ...
- javascript冷知识
本人很少写博客,所以文笔很不好,如果解释的不够清楚的,欢迎点评 1.+号(一元加操作符): 如果放在数值前的话,对数值不会产生任何影响,不过放在其他的数据类型前面的话,就等于调用number()将他转 ...
- Flume-ng-1.4.0 spooling source的方式增加了对目录的递归检测的支持
因为flume的spooldir不支持子目录文件的递归检测,并且业务需要,所以修改了源码,重新编译 代码修改参考自:http://blog.csdn.net/yangbutao/article/det ...
- C#.NET使用AnimateWindow制作淡入淡出特殊效果的窗体
使用AnimateWindow制作淡入淡出效果的窗体 命名空间: using System.Runtime.InteropServices; API函数: [DllImport("user3 ...
- mysql索引补充
索引补充 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列 ...
- IOS 弹出菜单的动态效果
效果1.点击按钮上浮 2.点击按钮下沉 3.点击按钮下拉展示 4.点击按钮向上收缩 5.左右如是说 关键是改变视图的大小位置的时机正确与否 eg1.1.点击按钮下沉消失 已知myView.frame= ...
- javass 视频笔记二 (关键字,标示符,常量变量,运算符和if-else)
1,java的关键字和标识符2,java的基本数据类型3,变量和常量4,java的运算符5,if-else if - else表达式1,java的关键字和标识符 1.1,所有关键字都要小写 ...