我想使用Nodatime编程世界时钟,并且我已经在网上搜索了关于如何使用该库的示例,并且我已阅读文档,说Instant类只是一些“滴答滴答”,因为一些任意时代的Unix纪元,对应于1970年1月1日午夜的UTC。那么,我凭经验猜测,如果我使用GMT作为即时值,那么我可以用它计算每个时区的时间值(创建世界时钟),并且它可以工作。我有的问题是,我不知道从当地时间计算GMT时间(或GMT时间)的简单方法,我的时区是“America/Mexico_City”,所以我的问题是,有没有捷径已经在Nodatime中定义从当地时间获得GMT时间,或者另一方面,是否有一种简单的方法来实现“即时GetInstantGMT()”功能(该功能必须计算日光节约时间问题) ?从本地时间转换为格林尼治标准时间(使用nodatime的世界时钟应用程序)
1
A
回答
1
如果你只是在寻找的“当前”的瞬间,例如代表现在,然后使用:
Instant now = SystemClock.Instance.Now;
称它是“GMT瞬间”是多余的,因为Instant
类型是代表通用时刻不考虑时区。它(大部分)等同于UTC - 与GMT基本相同。换句话说,您无法创建Instant
,即不是 GMT。
另一种方式来思考一个Instant
是因为如果它是一个DateTime
其.Kind
财产被永久固定DateTimeKind.Utc
并不能代表任何东西。
而且,这依赖于你的应用程序如何构建,你可能会发现使用IClock
接口来代替:
IClock clock = SystemClock.Instance;
Instant now = clock.Now;
这将使你的单元测试过程中更换系统时钟用假时钟。
关于如何从一个特定的本地时间去一个Instant
,你会做这样的事情:
LocalDateTime ldt = new LocalDateTime(2013, 1, 1, 0, 0, 0);
DateTimeZone tz = DateTimeZoneProviders.Tzdb["America/Mexico_City"];
ZonedDateTime zdt = ldt.InZoneLeniently(tz);
Instant instant = zdt.ToInstant();
注意,我在转换中使用InZoneLeniently
。这使得关于如何从当地时间进行翻译的某些假设可能无效或模糊,因为daylight saving time。这可能是可以接受的,或者你可能更喜欢使用InZoneStrictly
这会抛出异常,或者InZone
,它允许你传递一个解析器的功能,所以你可以提供你自己的逻辑。
相关问题
- 1. 将格林尼治标准时间转换为当地时间
- 2. 转换日期/时间格林尼治标准时间格林尼治标准时间使用Javascript
- 3. 转换日期与时间为格林尼治标准时间
- 4. 时区转换为CST格林尼治标准时间偏移
- 5. 当地时间与格林尼治标准时间
- 6. 转换(YYYY/MM/DD HH:MM:SS:MS)格林尼治标准时间当地时间JavaScript的
- 7. 转换日期为格林尼治标准时间 - PHP
- 8. 从本地时间到格林尼治标准时间的更改
- 9. NSString到格林尼治标准时间的NSDate转换
- 10. 格林尼治标准时间上午12点转换错误
- 11. 不能将时间转换为格林威治标准时间
- 12. 使用格林尼治标准时间格式的偏移量
- 13. 格林尼治标准时间上午9点设置闹钟
- 14. 根据格林尼治标准时间转换日期和时间
- 15. 世界时使用格林威治标准时间(GMT)的原因是什么
- 16. 获取格林尼治标准时间(毫秒)使用JAVA
- 17. 如何获得夏令时格林尼治标准时间
- 18. PHP时区问题| UTC和格林尼治标准时间
- 19. 芹菜花显示格林尼治标准时间,而不是本地时区
- 20. 格林威治标准时间格式转换为POSIXct
- 21. 格林尼治标准时间格式整数格式
- 22. 格林威治标准时间与格林威治标准时间之间的时差现在格林威治标准时间和2013年1月1日gmt
- 23. Java/Android - 将格林尼治标准时间字符串转换为当地时间
- 24. 从格林威治标准时间格式中删除时间
- 25. ColdFusion - 格林尼治标准时间格式与GMT偏移量
- 26. 格林尼治标准时间和UTC格式化与NSDateFormatter
- 27. DateTimeOffset存储为格林威治标准时间转换为中央时间
- 28. 如何将用户本地时间戳转换为格林威治时间
- 29. Moment.js格式不正确,格林尼治标准时间日期和时间
- 30. 将格林威治标准时间转换为EST