LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zonedDateTime =ldt.atZone(ZoneId.of(""Asia/Kolkata""));
zonedDateTime.toInstant().toEpochMilli();
但这一个返回的是基于本地时间的毫秒。也不考虑ZoneID。
假设localdatetime(“2019-04-10t05:30”)
。如果我将其转换为具有区域id(“Asia/Kolkata”)的ZonedDateTime
,那么我将得到(“2019-04-10T05:30+05:30[Asia/Kolkata]”
)。然后以UTC转换为EpochMilli(1554854400000)=(“Wed Apr 10 2019 00:00:00”
)。
您正在使用即时
来获取毫秒表示。即时不是基于区域的。现在,纪元时间是基于“1970-01-01T00:00:00Z”的,所以您不应该有区域在其中。
如果您希望从epoch值创建ZoneDateTime
,您可以简单地在该epoch时间创建Instant
,然后使用您希望的区域创建ZoneDateTime
:
//Let's create our zone time (just to keep your logic
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zonedDateTime =ldt.atZone(ZoneId.of("Asia/Kolkata"));
//Then get the epoch on GMT
long e = zonedDateTime.toInstant().toEpochMilli();
Instant i = Instant.ofEpochMilli(e);
System.out.println(ZonedDateTime.ofInstant(i, ZoneId.systemDefault()));
System.out.println(ZonedDateTime.ofInstant(i, ZoneId.of("Asia/Kolkata")));
2019-04-12T05:10:31.016+02:00“欧洲/巴黎”
2019-04-12T08:40:31.016+05:30“亚洲/加尔各答”
long e = Instant.now().toEpochMilli();
问题内容: 我的时间以毫秒为单位,我需要将其转换为ZonedDateTime对象。 我有以下代码 线 给我一个错误,说未为类型LocalDateTime定义方法millsToLocalDateTime 问题答案: 并且是不同的。 如果需要,您可以按照以下方式进行操作:
问题内容: 如何在Java中将纪元转换为? 给定的代码期望 长 值,因此将抛出上面给出的值。 问题答案: 罗勒·布尔克(BasilBourque)的答案很不错。从小数部分中取出纳秒到一个纳秒整数可能会导致一个或两个陷阱。我建议: 此打印 纳秒级不需要64位,因此我只是使用。 假设:我假设您的字符串包含一个浮点数,并且可以对其进行签名,例如,这意味着在纪元开始 前 一秒半。如果某一天的时间用科学计数
在某些情况下,日期是错误的。有什么建议吗?
问题内容: 这是我的尝试 因此,当我尝试类似的值时3600000ms,我得到01:59:00,这是错误的,因为它应该是01:00:00。显然我的逻辑有问题,但是目前,我看不出它是什么! 有人可以帮忙吗? 编辑 固定它。这是格式化毫秒hh:mm:ss格式的正确方法 问题是这样的TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(milli
我将calendar.getTimeinMilliseconds()中的日期存储在SQLite DB中。我需要在SELECT语句中标记每个月的第一行,所以我只需要使用SQLite函数将时间以毫秒为单位转换为任何日期格式。我怎样才能避免这个?
问题内容: 我想记录用户在我的程序中开始执行操作所用的时间。当他完成后,我会减去当前从变量,我想向他们展示使用人类可读的格式经过诸如“XX小时XX分钟,XX秒”,甚至是“XX分钟,XX秒”的时间,因为它的不太可能花一个小时。 最好的方法是什么? 问题答案: 使用类: 注意:是Java 1.5规范的一部分,但从Java 1.6开始添加。 要为值0-9添加前导零,只需执行以下操作: 如果不支持Time