javascript的Date日期文本与.net的DateTime之间互转

string  fmtDate  =   " ddd MMM d HH:mm:ss 'UTC'zz'00' yyyy " ;
CultureInfo  ciDate  =  CultureInfo.CreateSpecificCulture( " en-US " );

string  得到js格式的时间文本  =  DateTime.Now.ToString(fmtDate, ciDate);

DateTime  从js时间文本里得DateTime  =  DateTime.ParseExact(
    
" Wed Apr 7 14:40:41 UTC+0800 2010 " , fmtDate, ciDate);

Console.WriteLine(得到js格式的时间文本);
Console.WriteLine(从js时间文本里得DateTime);

 

再记录一些 DateTime 的相关知识

DateTime.ToBinary 的实现原理:如果是 UTC 时刻,则取 Ticks 然后通过以下运算得到。

 

 

long binaryValue = DateTime.UtcNow.Ticks | ((( long1) <<  0x3e);

 

 

DateTime.Ticks 则是 从公元 1-1-1 0:00:00 起过去的时间,以 100 nanosecond(100纳秒,10-7 秒)为一个刻度。

如果是类似java之类的从 epoch (就是 1970-01-01 00:00:00.000 )起算的,则要对这个数值做相应的运算

 

 

//
const  long t1970 =  0x89F7FF5F7B58000L;

DateTime epoch = DateTime.FromBinary(t1970);

long javams = (DateTime.UtcNow.Ticks - t1970) / 10000L;

//long mm = java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTimeInMillis()

//(javams == mm) = true 

//

 

同理,要在.net里得到像 javascript 一样的时间值 new Date().getTime() 的值。则是

 long jsNow = (DateTime.UtcNow.Ticks - 0x89F7FF5F7B58000L) / 10000L;

 

 如果需要从java实现 .net 的 DateTime.Now.ToBinary(),则如下

  

 //

     static  long t1970 = 0x89F7FF5F7B58000L;

     long mm = java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTimeInMillis() * 10000 + t1970;
     long binaryValue = mm | ((( long) 1) << 0x3e);

    System.out.println(binaryValue);
//

转载于:https://www.cnblogs.com/vinstudio/archive/2010/04/07/1706313.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值