试图在java中获取世界时间似乎是如此困难。C# 中类似这样的东西
DateTime.Now.ToUniversalTime()
Run Code Online (Sandbox Code Playgroud)
似乎是那么困难的事情。我有代码从较早的日期(也是 utc)中减去当前的 utc 时间来查找时间差。但我似乎不知道如何获取当前的 utc 时间。这是我当前的代码
Date date = new Date();
long difference = date.getTime() - s.getTime();
Run Code Online (Sandbox Code Playgroud)
s已经是 UTC 时间,因为它来自向我传递 UTC 时间的源
当前 UTC 时刻:
\n\nInstant.now()\nRun Code Online (Sandbox Code Playgroud)\n\n经过时间:
\n\nInstant then = \xe2\x80\xa6 ;\nInstant now = Instant.now();\n\nDuration duration = Duration.between( then , now ); // For days-hours-minutes-seconds scale.\nRun Code Online (Sandbox Code Playgroud)\n\n以毫秒计数进行渲染。
\n\nlong millis = duration.toMillis(); // Possible data-loss in truncating nanoseconds to milliseconds.\nRun Code Online (Sandbox Code Playgroud)\n\nJava 中处理日期时间的现代方法是 java.time 类。
\n\nInstant该类表示UTCInstant时间线上的时刻,分辨率为纳秒(最多九 (9) 位小数)。
Instant instant = Instant.now(); // Current moment in UTC.\nRun Code Online (Sandbox Code Playgroud)\n\n该类Duration表示与时间线无关的一段时间。您可以输入一对Instant对象来计算其间的天数、小时数、分钟数、秒数和纳秒数。
Duration duration = Duration.between( thisInstant , thatInstant );\nRun Code Online (Sandbox Code Playgroud)\n\n调用以标准ISO 8601格式toString生成字符串,其中标记开始并将任何年-月-日与小时-分钟-秒分隔开。例如,一个半小时是。PnYnMnDTnHnMnSPTPT1H30M
您可以获得该持续时间的总毫秒数。但请注意可能的数据丢失。和类Instant的Duration工作分辨率为纳秒,比毫秒精细得多。因此,提取毫秒将截断毫秒之外的任何零点几秒。换句话说,您将只拥有最多三位数字,而不是一瞬间具有最多九位数字的十进制表示形式。
long millis = duration.toMillis(); // Possible data-loss in truncating nanoseconds to milliseconds.\nRun Code Online (Sandbox Code Playgroud)\n\njava.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
Joda -Time项目目前处于维护模式,建议迁移到 java.time。
\n\n要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
\n\n从哪里获取 java.time 类?
\n\nThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、、等等。YearWeekYearQuarter
更新:Joda-Time项目现在处于维护模式,建议迁移到 java.time。让这部分完整地留在历史中。
\n\n使用Joda-Time 2.4 库。
\n\nDateTime nowUtc = DateTime.now( DateTimeZone.UTC );\nRun Code Online (Sandbox Code Playgroud)\n\n最好避免使用 java.util.Date 和 .Calendar,因为它们非常麻烦。但如果你必须的话,你可以转换。
\n\nDate date = nowUtc.toDate();\nRun Code Online (Sandbox Code Playgroud)\n\n至于获取日期时间值之间的差异,请在 StackOverflow 中搜索数百个答案。Joda-Time 提供 3 个类来表示时间跨度:Interval、Period 和 Duration。
\n日期采用UTC 时间。Date 没有附加时区。
http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#getTime()
返回此 Date 对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
是什么让你认为现在是当地时间?
编辑:文档确实这么说,所以也许这就是问题所在:
尽管 Date 类旨在反映协调世界时 (UTC),但根据 Java 虚拟机的主机环境,它可能不会完全反映这一点。
看起来这可能是一个很好的解决方案:
Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16099 次 |
| 最近记录: |