Java utc毫秒
用java获取世界时似乎很困难。在C中类似这样的东西# 这似乎很难。我有一个代码,它将当前utc时间与以前的日期(也是utc)相减,以找出时间差。但我似乎不知道如何获取当前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以来的
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。将此部分保留为历史 使用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();