把这几个整型转变来.net的DateTime.

 

 public class Program
    {
        public static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            long javaTimeMillis_1 = 1420335269000;
            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 = 1420335269000;
            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系统。查看数据的时候,忽然全数人都倒霉了,数据库中国和东瀛期字段时间为毛都以整型?在此之前根本不曾接触过java,所心就趁早询问了弹指间。原本,在数据库中,保存的是java中的System.currentTimeMillis()。这些重回是从一九六两年5月1日0时0分0秒起到未来的皮秒数,况兼那是个UTC时间。精晓了干吗是整型的,而自己是用的.net
mvc,要想准确展现出时间,还要求做一定的转移,然后就悟出了一种最简易的点子,写多个通用的主意,把这一个整型转变成.net的DateTime.

并于结构体和平运动算符重载,网络有相当多基础的牵线,但是常常的品类中确非常少用得到,基本上日常都是用类庖代了(其实这种是荒唐的,然则平时也从没太留意)。

把这几个整型转变来.net的DateTime.。 

 

把这几个整型转变来.net的DateTime.。成功!

从英特网扒了二个办法:

public static DateTime? ConvertJavaDateTimeToNetTime(long time_JAVA_Long)//java长整型日期,毫秒为单位 
{
  DateTime dt_1970 = new DateTime(1970, 1, 1, 0, 0, 0);                
  long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度                         
  long time_tricks = tricks_1970 + time_JAVA_Long * 10000;//日志日期刻度                        
  DateTime dt = new DateTime(time_tricks).AddHours(8);//转化为DateTime
  return dt;
}

把这几个整型转变来.net的DateTime.。 运维测验一下:

把这几个整型转变来.net的DateTime.。 完毕地点的代码,我们再写三个测量检验方法:

把这几个整型转变来.net的DateTime.。把这几个整型转变来.net的DateTime.。然后自身包裹一下,可间接用。

 

自此碰着java的long time,直接使用DateTime
dt=ConvertJavaDateTimeToNetTime(1207969641193);那样使用就能够。

 

 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(1970, 1, 1, 0, 0, 0);
            long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度                         
            long time_tricks = tricks_1970 + JavaTimeMillis * 10000;//日志日期刻度                        
            DateTime dt = new DateTime(time_tricks).AddHours(8);//转化为DateTime
            return dt;
        }
        public override string ToString()
        {
            return this.Value.ToString();
        }
    }

而是,假若平常碰到那样的难题,笔者老是都要调用这么些方式,是还是不是很low?

 

沉凝,即然java有大多系统中,时间都以用那这种办法保留的,我们可不得以,自定义一类别型。特地在.net系统中,作为java的long
time类型?

图片 1

主题材料消除了。

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图