代码之家  ›  专栏  ›  技术社区  ›  HoTicE

如何在PST上实现毫微秒到午夜

  •  1
  • HoTicE  · 技术社区  · 9 年前

    我需要在“America/Los_Angeles”(PST)获得从现在到午夜的毫秒数。

    midnightAtPST = ???;
    
    long millis = ChronoUnit.MILLIS.between(now, midnightAtPST) ???
    

    LocalDateTime midnight = LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1);
    Instant midnigthPST = midnight.atZone(ZoneId.of("America/Los_Angeles")).toInstant();
    Instant now = LocalDateTime.now().toInstant(ZoneOffset.UTC);
    
    long millis = ChronoUnit.MILLIS.between(now, midnigthPST);
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Tunaki    9 年前

    由于您对特定区域的时间感兴趣,请不要使用 LocalDateTime ,它没有时区的概念,但使用 ZonedDateTime .

    您可以使用 ZonedDateTime.now(zone) 静态工厂。然后,可以使用方法将日期设置为给定时区的午夜(第二天) atStartOfDay(zone) 在类型上 LocalDate .

    ZoneId zoneId = ZoneId.of("America/Los_Angeles");
    ZonedDateTime now = ZonedDateTime.now(zoneId);
    ZonedDateTime midnight = LocalDate.now().atStartOfDay(zoneId).plusDays(1);
    
    long millis = ChronoUnit.MILLIS.between(now, midnight);
    

    这将正确返回当前日期与洛杉矶第二天开始之间的毫秒数。

        2
  •  0
  •   assylias    9 年前

    你的方法很好,除了 now 即时,您可以将其从时区转换为UTC时区,从而提供您不希望的偏移量。

    这应该如您所期望的那样工作:

    Instant now = Instant.now();
    
    推荐文章