是否可以从两个时间戳确定UTC偏移量?

时间:2017-08-24 22:17:22

标签: java datetime timestamp utc datetimeoffset

假设我有两个时间戳。一个是UTC,另一个的时区是未知的,但有一个日期和时间。后者的格式为YYYY:MM:DD HH:MM:SS

从UTC中减去第二个时间戳,然后舍入小时数,从UTC获得偏移量是否合理?

使用Java有没有直接的方法呢? (例如Joda或JUT?)

谢谢!

一些背景:这些日期来自图像的EXIF元数据。 EXIF以CreateDate格式存储图像的YYYY:MM:DD HH:MM:SS,没有时区信息。它还在GPSTimeStamp下存储UTC时间戳(有时)。使用这两个值,我希望得到偏移量,以便用它存储创建日期。虽然TZ偏移有EXIF元数据,但相机很少记录。

2 个答案:

答案 0 :(得分:2)

这是一个建议。我知道我可能还没有理解你的两个“时间戳”的确切格式或数据类型。我希望你能找到一些灵感,也许可以适应你的情况。随意回复问题。

The zone offset is +08:30

打印:

{{1}}

正如评论中所讨论的那样,整数小时通常是一个糟糕的主意。这些天可能是安全的四舍五入到一刻钟,但我会犹豫,谁知道一个地方是否会引入明年8:20的抵消?历史上存在秒数的区域偏移,所以如果你的时间戳表示“过去的好日子”,你应该避免任何舍入。

答案 1 :(得分:1)

这就是我最终做的事情:

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以CreateDate格式存储图像的YYYY:MM:DD HH:MM:SS,没有时区信息。它还在GPSTimeStamp下存储UTC时间戳(有时)。使用这两个值,我希望得到偏移量,以便用它存储创建日期。虽然TZ偏移有EXIF元数据,但相机很少记录。