首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的C# DateTime

Java中的C# DateTime
EN

Stack Overflow用户
提问于 2014-07-24 15:55:40
回答 3查看 2.1K关注 0票数 2

我正试图在Java中将数千秒转换为时间。

当我在C#中做这件事时

代码语言:javascript
复制
DateTime EpochOrigin = new DateTime(1970, 1, 1, 0, 0, 0, 0);

Console.WriteLine("1406205185123 = " + EpochOrigin.AddMilliseconds(1406205185123));

结果 24/07/2014 12:33:05

当我用Java做同样的事情时,

代码语言:javascript
复制
 Calendar cc = new GregorianCalendar();

cc.setTimeInMillis(1406205185123L);

结果清华7月24日13:33:05北京时间2014年

Java结果比C#多增加了1个小时。

有什么建议我该怎么解决吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-24 16:22:15

在C#中,DateTime不存储时区信息,而是具有一个Kind属性,该属性的值指示由此实例表示的时间是基于本地时间、协调世界时间(UTC)还是基于neithee (参见MSDN )。DateTime.Kind属性的默认值是Unspecified。因此,在C#代码中,用行创建了一个DateTime结构

代码语言:javascript
复制
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);

绝对应该以这种方式创建:

代码语言:javascript
复制
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

为了作为转换的参考时间(时代起源为1970年1月1日,00:00 UTC)。

更多信息可以在前面的问题:https://stackoverflow.com/a/2883645/1236452中找到。

编辑1

一个简短的注释:DateTime in C#不知怎么知道时区(我的本地时间是DateTime,请参阅评论和编辑2):

代码语言:javascript
复制
DateTime t = new DateTime(1970,1,1,0,0,0);
Console.WriteLine(t.ToLocalTime());      // 01/01/1970 01:00:00 (GMT+1)
Console.WriteLine(t.ToUniversalTime());  // 31/12/1969 23:00:00 (GMT)

编辑2

正如注释中正确指出的那样,DateTime不知道时区,因为它保存时区信息。但是,在其Kind属性中,它确实存储了一个值,该值指示实例是基于本地时间还是基于UTC,如文档中所述:

DateTime.Kind属性:获取一个值,该值指示此实例表示的时间是基于本地时间、协调世界时间(UTC)还是两者都不确定。..。 Kind属性允许DateTime值清楚地反映协调世界时(UTC)或本地时间。相反,DateTimeOffset结构可以明确地将任何时区中的任何时间作为单个时间点来反映。

票数 2
EN

Stack Overflow用户

发布于 2014-07-24 16:07:26

正如你所看到的,在Java中有BST标记,这说明它是在英国的夏季时间。因此,GregorianCalendar将您的时区考虑在内。

DateTime in C#不知道时区,所以它是UTC,因为unix时代是UTC,如果将毫秒添加到UTC时间,也会得到UTC时间。

票数 2
EN

Stack Overflow用户

发布于 2014-08-01 21:48:59

谢谢你的答复和回答。我知道为什么:

C#和Java都知道时区。

因为这是c#干的

代码语言:javascript
复制
DateTime EpochOrigin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
EpochOrigin.AddMilliseconds(1406205185123)

在Java中,应该是

代码语言:javascript
复制
Calendar cal = Calendar.getInstance();
cal.set(1970, 0, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
long result = cal.getTimeInMillis();
long value = result + 1406205185123;
return new Timestamp(value);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24938554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档