前几天,因为工作原因,连到了公司的一个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#日期转换(结构+运算符重载)的更多相关文章

  1. Java longTime 和C#日期转换

    封装一下,可直接用. 以后碰到java的long time,直接使用DateTime dt=ConvertJavaDateTimeToNetTime(1207969641193);这样使用即可. 这串 ...

  2. Java Date,long,String 日期转换

    1.java.util.Date类型转换成long类型java.util.Date dt = new Date();System.out.println(dt.toString()); //java. ...

  3. 时间日期转换工具类,获取当前时间YYYYMMDD24HHMISS、YYYYMMDDHHMISS

    YYYYMMDD24HHMISS:24小时制时间(显示上只是比YYYYMMDDHHMISS中间多了一个24),例:2018102224112440 YYYYMMDDHHMISS:12小时制时间,例20 ...

  4. 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

    [源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...

  5. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  6. java中的日期转换

    在java中有两种Date对象,一种是java.sql.Date,另一种是java.util.Date 一.java.sql.Date对象: 这种Date对象使用了进行数据库操作的,它对应了数据库中的 ...

  7. 日期转换工具类 CommUtil.java

    package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...

  8. 日期转换类 DateConverter.java

    package com.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.D ...

  9. java日期转换

    在java开发过程中,时间的转换时必须掌握的=========下面把时间转换做个总结,有可能不是很全面 时间格式只有两种 yyyy-MM-DD yyyy/MM/DD 时间的类型:字符串类型.sql类型 ...

随机推荐

  1. 分享:Android中利用机器码注册机制防止破解(转)

    转自:http://blog.csdn.net/huzgd/article/details/6684094 最近做一个Android应用时遇到这个问题,客户要求功能必须注册才能使用,而程序本身又不是联 ...

  2. nicehair

    https://github.com/lanyj189/nicehair https://github.com/eltld/nicehair https://github.com/pepoc/Cust ...

  3. python类型转换、数值操作(转)

    最近学习python语言,碰到数据类型间的转换问题.看到一篇文章总结的挺详细,收藏之备用. 类型转换 代码 Code highlighting produced by Actipro CodeHigh ...

  4. NDK debug模式

    NDK默认是使用NDEBUG宏的,assert也默认不生效,若要开启assert,按以下步骤: 1.編譯NDK代碼時,後面加上NDK_DEBUG=1 ,如: ndk-build NDK_BUILD=1 ...

  5. 如何快速检查js语法学习Javascript

    这里给大家推荐一个快速进行语法检查的方法,可以发现绝大多数语法错误,也可以作为在线编辑器,提高编程效率. 地址:http://www.jslint.com/ 同时推荐一个在线学习Javascript的 ...

  6. 用 Gearman 分发 PHP 应用程序的工作负载

    尽管一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体现在若干专有服务或算法方面.如果这类处理过于复杂或拖沓,最好是进行异步执行,以免 Web 服务器对传入的请求没有响应.实 ...

  7. storm0.9.0.1安装

    storm 0.9.x的好处是引入了netty进行网络传输(需要配置),不用再依赖zeromq和jzmq了 1.下载安装zookeeper ... 2.下载安装storm依赖库 JDK1.6及以上 . ...

  8. CSU 1552: Friends 图论匹配+超级大素数判定

    1552: Friends Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 163  Solved: 34[Submit][Status][Web Boa ...

  9. Python xml 解析百度糯米信息

    先利用爬虫利用百度糯米提供的api来采集北京当天的团购信息,保存为numi.html import xml.etree.ElementTree as ET import os class Nuomi( ...

  10. #maven解决乱码问题

    <build>        <plugins>        <plugin>        <groupId>org.apache.maven.pl ...