Java UTC 毫秒

Jak*_*ake 5 java datetime utc

试图在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 时间的源

Bas*_*que 6

太长了;博士

\n\n

当前 UTC 时刻:

\n\n
Instant.now()\n
Run Code Online (Sandbox Code Playgroud)\n\n

经过时间:

\n\n
Instant then = \xe2\x80\xa6 ;\nInstant now = Instant.now();\n\nDuration duration = Duration.between( then , now ); // For days-hours-minutes-seconds scale.\n
Run Code Online (Sandbox Code Playgroud)\n\n

以毫秒计数进行渲染。

\n\n
long millis = duration.toMillis();  // Possible data-loss in truncating nanoseconds to milliseconds.\n
Run Code Online (Sandbox Code Playgroud)\n\n

java.time

\n\n

Java 中处理日期时间的现代方法是 java.time 类。

\n\n

Instant

\n\n

该类表示UTCInstant时间线上的时刻,分辨率为纳秒(最多九 (9) 位小数)。

\n\n
Instant instant = Instant.now();  // Current moment in UTC.\n
Run Code Online (Sandbox Code Playgroud)\n\n

该类Duration表示与时间线无关的一段时间。您可以输入一对Instant对象来计算其间的天数、小时数、分钟数、秒数和纳秒数。

\n\n
Duration duration = Duration.between( thisInstant , thatInstant );\n
Run Code Online (Sandbox Code Playgroud)\n\n

调用以标准ISO 8601格式toString生成字符串,其中标记开始并将任何年-月-日与小时-分钟-秒分隔开。例如,一个半小时是。PnYnMnDTnHnMnSPTPT1H30M

\n\n

您可以获得该持续时间的总毫秒数。但请注意可能的数据丢失。和类InstantDuration工作分辨率为纳秒,比毫秒精细得多。因此,提取毫秒将截断毫秒之外的任何零点几秒。换句话说,您将只拥有最多三位数字,而不是一瞬间具有最多九位数字的十进制表示形式。

\n\n
long millis = duration.toMillis();  // Possible data-loss in truncating nanoseconds to milliseconds.\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

关于 java.time

\n\n

java.time框架内置于 Java 8 及更高版本中这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

\n\n

Joda -Time项目目前处于维护模式,建议迁移到 java.time。

\n\n

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

\n\n

从哪里获取 java.time 类?

\n\n\n\n

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、、等等。YearWeekYearQuarter

\n\n
\n\n

乔达时间

\n\n

更新:Joda-Time项目现在处于维护模式,建议迁移到 java.time。让这部分完整地留在历史中。

\n\n

使用Joda-Time 2.4 库。

\n\n
DateTime nowUtc = DateTime.now( DateTimeZone.UTC );\n
Run Code Online (Sandbox Code Playgroud)\n\n

最好避免使用 java.util.Date 和 .Calendar,因为它们非常麻烦。但如果你必须的话,你可以转换。

\n\n
Date date = nowUtc.toDate();\n
Run Code Online (Sandbox Code Playgroud)\n\n

至于获取日期时间值之间的差异,请在 StackOverflow 中搜索数百个答案。Joda-Time 提供 3 个类来表示时间跨度:Interval、Period 和 Duration。

\n


Bla*_*ell 0

日期采用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)