java 是否有可能从两个时间戳中确定UTC偏移?

qgelzfjb  于 2023-10-14  发布在  Java
关注(0)|答案(2)|浏览(81)

假设我有两个时间戳。一个是UTC,另一个的时区是未知的,但有一个日期和时间。后者的格式是YYYY:MM:DD HH:MM:SS
通过简单地从UTC时间减去第二个时间戳,然后四舍五入小时来获得UTC的偏移量是否合理?
有没有一种简单的方法可以用Java来实现?(例如,Joda或JUT?)
谢谢你,谢谢
一点背景:这些日期来自图像的EXIF元数据。EXIF以以下格式存储图像的CreateDateYYYY:MM:DD HH:MM:SS没有时区信息。它还在GPSTimeStamp下存储UTC时间戳(有时)。使用这两个值,我希望得到偏移量,以便用它存储创建日期。虽然有TZ偏移的EXIF元数据,但相机很少记录它。

uyto3xhc

uyto3xhc1#

免责声明:我可能没有理解你的两个“时间戳”的确切格式或数据类型。我有个建议。

String dateTimeStringUtc = "2017-08-25T11:46:47.307";
    // for the sake of the example I took North Korean time; don’t tell anyone just yet :-)
    String dateTimeStringUnknownOffset = "2017-08-25T20:16:47.307";
    
    LocalDateTime utcTime = LocalDateTime.parse(dateTimeStringUtc);
    LocalDateTime unknownOffsetTime = LocalDateTime.parse(dateTimeStringUnknownOffset);
    long offsetSeconds = ChronoUnit.SECONDS.between(utcTime, unknownOffsetTime);
    if (Math.abs(offsetSeconds) > 64800) { // out of range
        System.out.println("The time strings cannot represent the same time");
    } else {
        ZoneOffset offset = ZoneOffset.ofTotalSeconds((int) offsetSeconds);
        System.out.println("The zone offset is " + offset);
    }

这将打印:

The zone offset is +08:30

正如评论中所讨论的,通常情况下,四舍五入到整个小时是一个糟糕的主意。这些天来,它可能是安全的四分之一小时,但我会犹豫,谁知道是否有地方将推出一个偏移8:20明年?从历史上看,以秒为单位的区域偏移量已经存在,所以如果您的时间戳表示“过去的好日子”,那么您可能应该避免任何舍入。

kse8i1jr

kse8i1jr2#

这就是我最终做的:

public static ZoneOffset determineTimeZoneOffset(OffsetDateTime localTime, OffsetDateTime utcTime) {
  if(utcTime == null || localTime == null) {
    return null;
  }

  OffsetDateTime ceilingUtc = utcTime.truncatedTo(ChronoUnit.HOURS).plusHours(1);
  OffsetDateTime ceilingLocal = localTime.truncatedTo(ChronoUnit.HOURS).plusHours(1);

  int offsetHours = (int)ChronoUnit.HOURS.between(ceilingUtc, ceilingLocal);

  return ZoneOffset.ofHours(offsetHours);
}
  • 将时间截短为小时是很好的选择,但对于应用程序来说,这是因为我们不需要走那么远。然而,我想用ChronoUnit.MINUTES甚至秒来截断是很容易的。一个有趣的练习,Ole V. V.有帮助的指出。
  • 不知道为什么这被否决了--也许是关于时间戳的含义的混乱。我认为从问题中可以很清楚地看出,我指的是一个通用的时间戳(如Ole V. V.其他注意到)。我希望那些持反对意见的人重读一下这个问题,调整一下他们的评估。
  • 虽然我不认为它与这个问题有关,但这些日期来自图像的EXIF元数据。EXIF以以下格式存储图像的CreateDateYYYY:MM:DD HH:MM:SS没有时区信息。它还在GPSTimeStamp下存储UTC时间戳(有时)。使用这两个值,我希望得到偏移量,以便用它存储创建日期。虽然有TZ偏移的EXIF元数据,但相机很少记录它。

相关问题