首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有可能从两个时间戳中确定UTC的偏移量吗?

有可能从两个时间戳中确定UTC的偏移量吗?
EN

Stack Overflow用户
提问于 2017-08-24 22:17:22
回答 2查看 1.1K关注 0票数 0

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

通过简单地从UTC 1减去第二个时间戳,然后舍入时间,从而得到UTC的偏移量是否合理?

是否有一种直接的方法可以使用Java来完成这个任务?(例如Joda还是JUT?)

谢谢!

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-26 14:16:17

这就是我最后所做的:

代码语言:javascript
复制
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元数据,但相机很少记录这一点。
票数 1
EN

Stack Overflow用户

发布于 2017-08-25 11:59:59

以下是一个建议:

代码语言:javascript
复制
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);
}

这些指纹:

代码语言:javascript
复制
The zone offset is +08:30

正如评论中所讨论的那样,把时间整到一整小时通常是个糟糕的主意。这些天转到四分之一小时也许是安全的,但我会犹豫,谁知道明年某个地方是否会推出8:20的补偿呢?历史上,带秒的区域偏移是存在的,所以如果您的时间戳表示“美好的过去”,您可能应该避免任何舍入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45871744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档