【问题标题】:trying to convert timestamp to time with data type as int尝试将时间戳转换为数据类型为 int 的时间
【发布时间】:2019-08-11 08:28:28
【问题描述】:

尝试使用 java 将时间戳转换为任何区域的时间,这里我可以使用 ZoneID 进行转换,但它会返回字符串数据类型。在这里我期待像 getTimeMillis() 的输出

Instant now = Instant.ofEpochMilli(lngDate);
ZoneId zoneId = ZoneId.of("America/Chicago");   

ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, zoneId);
DateTimeFormatter isoDateFormatter = DateTimeFormatter.ISO_DATE_TIME;
String zdt = zonedDateTime.format(isoDateFormatter);

这里我只期望时间毫秒(8 位数字),下面给你我的代码,请你帮忙解决它。

输入:1552979609000L

DateTimeFormatter isoDateFormatter = DateTimeFormatter.ISO_TIME;
String zdt = zonedDateTime.format(isoDateFormatter); // output in string : 00:13:29-07:00
LocalTime time = LocalTime.parse(zdt, isoDateFormatter); // output in local time : 00:13:29 

【问题讨论】:

  • 您到底想转换什么? “时间戳”可能意味着很多东西。您是否正在尝试转换 Instant?分区日期时间? java.sql.Timestamp?一个字符串?日期时间的毫秒表示很长,那么您希望如何将其放入 int 中?
  • 另外,一般来说,一个不代表除 UTC 之外的任何其他时区的数字时间戳。有一些例外,但通常如果我看到基于 Unix 纪元的时间戳,则该纪元是 UTC,因此该时间戳是 UTC。对于我可能给它的任何人来说,放入其他时区都会有问题,因为他们会将其视为 UTC。换句话说,您将完全选择一个不同的时间点。

标签: java java-8 timestamp timezone java-time


【解决方案1】:

如果我理解正确,您需要一天中的毫秒数,换句话说,从 0(包括)到 86 400 000(不包括;最多 8位数)。 ChronoField 枚举有一个常量,所以当您知道如何操作时就很简单了:

    int millisecondOfDay = zonedDateTime.get(ChronoField.MILLI_OF_DAY);
    System.out.println("Millisecond of day: " + millisecondOfDay);

刚刚运行时的输出:

毫秒:7773854

【讨论】:

  • 感谢您的信息。在这里我只期待时间毫秒(8位数字),下面给你我的代码,请你帮忙解决它输入:1552979609000L DateTimeFormatter isoDateFormatter = DateTimeFormatter.ISO_TIME;字符串 zdt = zonedDateTime.format(isoDateFormatter); // 以字符串形式输出:00:13:29-07:00 LocalTime time = LocalTime.parse(zdt, isoDateFormatter); // 本地时间输出:00:13:29
  • 我想我现在明白了。我已经重写了答案。
猜你喜欢
  • 1970-01-01
  • 2012-08-19
  • 2013-02-14
  • 2021-07-31
  • 2012-04-30
  • 2021-06-25
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多