当前位置: 首页 > 知识库问答 >
问题:

如何在Java中将ZonedDateTime转换为毫秒?

苏昂雄
2023-03-14
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”)。

共有1个答案

施阎宝
2023-03-14

您正在使用即时来获取毫秒表示。即时不是基于区域的。现在,纪元时间是基于“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