Java8如何将字符串转换为UTC日期对象

后端 潘老师 7个月前 (10-31) 164 ℃ (0) 扫码查看

学习使用Java中的DateTimeFormatter类将字符串转换为日期时间实例类,例如ZonedDateTime或OffsetDateTime类。

1.Instant、OffsetDateTime和ZonedDateTime类

在Java 8中,OffsetDateTime和ZonedDateTime都存储了瞬时在通用时间线上的纳秒精度。

  • OffsetDateTime增加了从UTC的偏移量,这使得本地日期时间可以被获得。当我们需要更详细地模拟日期时间概念,或者与数据库或网络协议通信时,可以使用OffsetDateTime。
  • ZonedDateTime在处理日期时使用完整时区规则。我们可以使用ZonedDateTime在UI中显示时间。它遵守DST(夏令时)规则。请注意,在DST更改期间,时区偏移量可能会根据时区ID而变化。

2. 将字符串解析为UTC中的OffsetDateTime

带有偏移信息的日期时间以任何模式表示。例如,如果我们使用模式“03/08/2019T16:20:17:717+05:30”,则此时间戳表示在“+05:30”偏移量处的瞬时。

下面是一个Java程序,用于将字符串转换为OffsetDateTime并获取等效的UTC瞬时。它使用withOffsetSameInstant(ZoneOffset.UTC)函数将给定的瞬时转换为UTC瞬时。

字符串中的’Z’代表UTC时区。它是Zulu的缩写形式,可以写成UTC +0:00。

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
    public static void main(String[] args) throws Exception
    {
        DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
                                .ofPattern("dd/MM/uuuu'T'HH:mm:ss:SSSXXXXX");
        //带有偏移量的日期字符串
        String dateString = "03/08/2019T16:20:17:717+05:30";
        //带有偏移量的实例化
        OffsetDateTime odtInstanceAtOffset = OffsetDateTime.parse(dateString, DATE_TIME_FORMATTER);
        //UTC实例化
        OffsetDateTime odtInstanceAtUTC = odtInstanceAtOffset.withOffsetSameInstant(ZoneOffset.UTC);
        //格式化为字符串
        String dateStringInUTC = odtInstanceAtUTC.format(DATE_TIME_FORMATTER);
        System.out.println(odtInstanceAtOffset);
        System.out.println(odtInstanceAtUTC);
        System.out.println(dateStringInUTC);
        //将OffsetDateTime转换为UTC中的即时时间
        System.out.println(odtInstanceAtOffset.toInstant());
    }
}

程序输出。

2019-08-03T16:20:17.717+05:30
2019-08-03T10:50:17.717Z
03/08/2019T10:50:17:717Z
2019-08-03T10:50:17.717Z

3. 将字符串解析为UTC中的ZonedDateTime

带有完整时区信息的日期时间可以表示为以下格式:

  • dd/MM/uuuu’T’HH:mm:ss:SSSXXXXX模式,例如“03/08/2019T16:20:17:717+05:30”。
  • MM/dd/yyyy’T’HH:mm:ss:SSS z模式,例如“08/03/2019T16:20:17:717 UTC+05:30”。

在这个例子中,时间戳表示在“+05:30”偏移量处的瞬时,即IST。

下面是一个Java程序,用于将字符串转换为ZonedDateTime并获取等效的UTC瞬时。它使用withZoneSameInstant(ZoneOffset.UTC)方法获取UTC时区ID中的瞬时。

Parse String to ZonedDateTimeimport java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
    public static void main(String[] args) throws Exception
    {
        DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
                                .ofPattern("MM/dd/yyyy'T'HH:mm:ss:SSS z");
        //带有时区信息的日期字符串
        String dateString = "08/03/2019T16:20:17:717 UTC+05:30";
        //实例化带有时区的日期
        ZonedDateTime zdtInstanceAtOffset = ZonedDateTime.parse(dateString, DATE_TIME_FORMATTER);
        //UTC实例化
        ZonedDateTime zdtInstanceAtUTC = zdtInstanceAtOffset.withZoneSameInstant(ZoneOffset.UTC);
        //格式化为字符串
        String dateStringInUTC = zdtInstanceAtUTC.format(DATE_TIME_FORMATTER);
        System.out.println(zdtInstanceAtOffset);
        System.out.println(zdtInstanceAtUTC);
        System.out.println(dateStringInUTC);
        //Convert ZonedDateTime to instant which is in UTC
        System.out.println(zdtInstanceAtOffset.toInstant());
    }
}

程序输出。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/10543.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】