C#Ticks转换为java util date;日期落后5小时?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#Ticks转换为java util date;日期落后5小时?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1840字,纯文字阅读大概需要3分钟。
内容图文
![C#Ticks转换为java util date;日期落后5小时?](/upload/InfoBanner/zyjiaocheng/826/3f1c5fc6ecbd4996afd043e9ba146712.jpg)
我需要帮助.我一直试图弄清楚为什么从C#ticks转换后,java util日期落后5个小时.
在C#中,日期是6/8/2013 11:02:07 AM,我将此日期转换为刻度,然后将其传递给java.
代码段:
采取:
- long TICKS_AT_EPOCH = 621355968000000000L;
- long TICKS_PER_MILLISECOND = 10000;
java.util.Date date = new java.util.Date((ctime - TICKS_AT_EPOCH) / TICKS_PER_MILLISECOND);
现在java的工作日期是星期六08月06日06:02:07 CDT 2013
请注意,小时是5小时的差异.
有什么建议吗?
解决方法:
您正在根据自1970年1月1日UTC以来的毫秒构建java.util.Date.您似乎正在纠正.net的System.DateTime.Ticks基于1/1/0001并且10,000个刻度到1毫秒的事实.这是正确的,但你忘了调整到UTC.
在.Net中,来自DateTime.Ticks的值高度依赖于DateTime.Kind属性.有三种可能的DateTime值.
> DateTimeKind.Utc – 此类表示该值表示UTC时间.它通常来自对DateTime.UtcNow的调用,但也可以直接构造,通常是.例如,您可能正在从数据库中检索UTC时间.您可以将此处的刻度直接输入到转换中,它将起作用.
> DateTimeKind.Local – 这通常来自对DateTime.Now的调用.这些值代表当地时区.在检查滴答之前,您需要转换为UTC.您可以执行以下操作:
DateTime dt = DateTime.Now;
int utcTicks = dt.ToUniversalTime().Ticks;
请注意,如果在夏令时“后退”样式转换期间发生时间,则结果可能不正确. DateTime类不了解时区.它只反映了当前的本地时钟.如果dt中的值不明确,ToUniversalTime()将假定该值代表标准时间,即使您在白天时间检索它也是如此.这只是.net中DateTime的许多令人困惑和可能的方面之一.
> DateTimeKind.Unspecified – 这是您将遇到的最常见的DateTime类型,通常来自DateTime.Parse()或类似new DateTime(…)的构造函数.很遗憾,这里没有任何内容可以告诉您这些日期代表的时区.您仍然可以尝试调用.ToUniversalTime(),但框架会假设这些时间代表您的本地时区,就好像那种类型是Local.这种假设可能完全错误,具体取决于您采购数据的方式.确实没有安全的方法将Unspecified DateTime转换为UTC值(ticks或其他).
有一些解决方案,例如使用DateTimeOffset而不是DateTime,或使用Noda Time库而不是内置类型.您可以阅读有关这些问题的更多信息here和here.
内容总结
以上是互联网集市为您收集整理的C#Ticks转换为java util date;日期落后5小时?全部内容,希望文章能够帮你解决C#Ticks转换为java util date;日期落后5小时?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。