Java utc毫秒

Java utc毫秒,java,datetime,utc,Java,Datetime,Utc,用java获取世界时似乎很困难。在C中类似这样的东西# 这似乎很难。我有一个代码,它将当前utc时间与以前的日期(也是utc)相减,以找出时间差。但我似乎不知道如何获取当前utc时间。这是我当前的代码 Date date = new Date(); long difference = date.getTime() - s.getTime(); s已经是utc时间,因为它来自一个向我传递utc时间的来源日期是utc时间。日期没有附加时区 返回自1970年1月1日00:00:00 GMT以来的

用java获取世界时似乎很困难。在C中类似这样的东西#

这似乎很难。我有一个代码,它将当前utc时间与以前的日期(也是utc)相减,以找出时间差。但我似乎不知道如何获取当前utc时间。这是我当前的代码

Date date = new Date();
long difference = date.getTime() - s.getTime(); 
s已经是utc时间,因为它来自一个向我传递utc时间的来源

日期是utc时间。日期没有附加时区

返回自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;

您可以使用以下方法查找UTC时间:

   Calender c= Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
然后您可以从日历对象中获取月、日、时间、年。。 例:
c.get(日历年)

希望这将对您有所帮助。

尝试一下:

最好的,
Loddi

嗯,没有人提到
System.currentTimeMillis()
,所以我将:)这将返回自Unix时代以来的毫秒数。这将始终以UTC为单位(例如,如果您在伦敦和雅典同时调用它,您将获得相同的值-如果这些设备上的时间设置正确,则时区应该无关紧要)。如果要从毫秒数中获取日历实例,可以执行以下操作:

Calendar cal = GregorianCalendar.getInstance();
cal.setTimeInMillis(yourMillis);
tl;博士 当前时刻(UTC):

Instant.now()
运行时间:

Instant then = … ;
Instant now = Instant.now();

Duration duration = Duration.between( then , now ); // For days-hours-minutes-seconds scale.
渲染为毫秒计数

long millis = duration.toMillis();  // Possible data-loss in truncating nanoseconds to milliseconds.
java.time Java中处理日期时间的现代方法是Java.time类

Instant
该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)

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

Duration duration = Duration.between( thisInstant , thatInstant );
调用
toString
以标准格式生成一个字符串,格式为
PnYnMnDTnHnMnS
,其中
p
标记开始,而
T
将任何年、月、日与时、分、秒分开。例如,一个半小时是
PT1H30M

您可以获取此持续时间内的总毫秒数。但要小心可能的数据丢失。
Instant
Duration
类的分辨率为,远高于。因此,提取毫秒将截断毫秒以外的任何一秒。换言之,您最多只能有三位数字,而不是以九位小数表示的一瞬间

long millis = duration.toMillis();  // Possible data-loss in truncating nanoseconds to milliseconds.

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门针对Android采用了Three Ten Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和


乔达时间 更新:该项目现已投入使用,建议迁移到java.time。将此部分保留为历史

使用2.4库

DateTime nowUtc = DateTime.now( DateTimeZone.UTC );
最好避免使用java.util.Date和.Calendar,因为它们非常麻烦。但如果你必须,你可以改变信仰

Date date = nowUtc.toDate();

至于获取日期时间值之间的差异,请搜索成百上千个答案。Joda Time提供了3个类来表示时间跨度:间隔、周期、,和持续时间。

我在我的android模拟器中运行此代码,它在模拟器上运行正常,但当它在设备上运行时,时间返回不正确。我也尝试了更新的代码,但当我在android设备上运行时,它返回错误的结果,但在模拟器上返回正确的结果。对不起,这个愚蠢的问题,但是你的Android设备可能被设置为GMT吗?我在应用程序中设置了一个字符串属性值,因此不应该返回值?或者说你是对的。这取决于设备设置。如何在代码中将其更改为utc。因为很明显,我无法手动更改每个设备上的时间
long millis = duration.toMillis();  // Possible data-loss in truncating nanoseconds to milliseconds.
DateTime nowUtc = DateTime.now( DateTimeZone.UTC );
Date date = nowUtc.toDate();