有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将LocalDateTime转换回Instant,而不知道时区,而是使用时钟?

我能。在进行了一些操作之后,比如添加时间单位,我想将其转换为Instant。但它需要时区。如何得到它

Clock clock = Clock.fixed(...);
LocalDateTime localDateTime = LocalDateTime.now(clock);
localDateTime = localDateTime.plusMinutes(60);
return localDateTime.toInstant(clock.getZone().getRules().getOffeset(...I need instant I don't have yet!...)

共 (2) 个答案

  1. # 1 楼答案

    您可以传递区域偏移量,例如ZoneOffset.UTC^{}。或者,您可以使用^{}创建ZonedDateTime,并将其转换为Instant

    import java.time.Clock;
    import java.time.Instant;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.ZoneOffset;
    
    public class Main {
        public static void main(String[] args) {
            Clock clock = Clock.systemUTC();
    
            LocalDateTime localDateTime = LocalDateTime.now(clock);
            localDateTime = localDateTime.plusMinutes(60);
    
            // UTC
            Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
            System.out.println(instant);
    
            // A custom zone offset
            instant = localDateTime.toInstant(ZoneOffset.of("+02:00"));
            System.out.println(instant);
    
            // Your JVM's default timezone
            instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
            System.out.println(instant);
    
            // A specific timezone
            instant = localDateTime.atZone(ZoneId.of("Africa/Ceuta")).toInstant();
            System.out.println(instant);
        }
    }
    

    输出:

    2021-03-10T14:30:35.294134Z
    2021-03-10T12:30:35.294134Z
    2021-03-10T14:30:35.294134Z
    2021-03-10T13:30:35.294134Z
    

    Trail: Date Time了解有关现代日期时间API的更多信息

  2. # 2 楼答案

    据我所知,当您想要转换回Instant时,您仍然可以访问Clock。你可以很容易地从时钟上得到时区。然后转换如下:

        Clock clock = Clock.fixed(Instant.EPOCH, ZoneId.of("Pacific/Tahiti"));
        LocalDateTime localDateTime = LocalDateTime.now(clock);
        localDateTime = localDateTime.plusMinutes(60);
        Instant convertedBack = localDateTime.atZone(clock.getZone()).toInstant();
        
        System.out.println(convertedBack);
    

    此示例代码段的输出为:

    1970-01-01T01:00:00Z