Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-将unix时间(以毫秒为单位)与时区转换为时间戳_Java_Time_Timezone_Unix Timestamp_Converters - Fatal编程技术网

Java-将unix时间(以毫秒为单位)与时区转换为时间戳

Java-将unix时间(以毫秒为单位)与时区转换为时间戳,java,time,timezone,unix-timestamp,converters,Java,Time,Timezone,Unix Timestamp,Converters,我有一个字符串,例如: 1517439600000+0100 我想把它转换成unix时间,单位为毫秒,没有时区。 我怎么做 p、 美国。 1) 我不能使用子字符串(0,5)并向字符串中添加360万毫秒,因为我有很多时区,一次是+0100,然后是+0200等等 2) 如果更容易转换为常规时间戳,如YYYY-mm-dd hh:mm:ss 应该没问题。您可以执行以下操作: String sign = "+"; String [] parts = time.split(sign);

我有一个字符串,例如:

1517439600000+0100
我想把它转换成unix时间,单位为毫秒,没有时区。 我怎么做

p、 美国。 1) 我不能使用
子字符串(0,5)
并向字符串中添加360万毫秒,因为我有很多时区,一次是+0100,然后是+0200等等

2) 如果更容易转换为常规时间戳,如YYYY-mm-dd hh:mm:ss
应该没问题。

您可以执行以下操作:

    String sign = "+";
    String [] parts = time.split(sign);

    Long millis = Long.parseLong(parts[0]);
    String zoneOffset = sign + parts[1];

    LocalDate date = Instant.ofEpochMilli(millis).atZone(ZoneOffset.of(zoneOffset)).toLocalDate();
输出:

2018-02-01T00:00+01:00

自历元起的毫秒数(1517 439 600 000)表示独立于时区或偏移量的时间点。因此,为了获得时间戳,解析这个数字就足够了。如果您对
即时
(本例中为2018-01-31T23:00:00Z)感到满意,您当然可以删除最后一半代码。我的风格是在我不需要所有信息的时候,也从字符串中获取所有信息

我用于拆分的正则表达式,
(?=[+-])
,是一个积极的前瞻:它匹配
+
-
前面的空字符串。匹配空字符串很重要,因此在拆分过程中不会丢失字符串的任何部分(我们需要保留符号)


解析偏移量的一种更简单的方法是
ZoneOffset.of(parts[1])
(正如NiVeR在另一个答案中所做的那样)。唯一的区别是,我使用的
DateTimeFormatter
还验证了格式是否确实像
+0100
(无冒号)或
Z

1517439600000+0100的格式是什么?当输入为
1517439600000+0100
?2018-FEB-01 00:00和UTC+1时,期望的输出是什么(UTC+2将于2018年2月1日01:00:00)
    String exampleString = "1517439600000+0100";
    // Split string before + or-
    String[] parts = exampleString.split("(?=[+-])");
    if (parts.length != 2) {
        throw new IllegalArgumentException("Unexpected/unsupported format: " + exampleString);
    }
    // Parse the milliseconds into an Instant
    Instant timeStamp = Instant.ofEpochMilli(Long.parseLong(parts[0]));
    // Parse the offset into a ZoneOffset
    DateTimeFormatter offsetFormatter = DateTimeFormatter.ofPattern("xx");
    ZoneOffset offset = ZoneOffset.from(offsetFormatter.parse(parts[1]));
    // Combine
    OffsetDateTime dateTime = timeStamp.atOffset(offset);
    System.out.println(dateTime);