如何在不修改任何内容的情况下在 Java 6 中存储具有 UTC 时区偏移量的时间戳?

How to store a timestamp with UTC timezone offset in Java 6 without modifying anything?

如果之前有人问过这个问题,我非常抱歉,我已经尝试搜索可以回答我问题的东西,但我找不到 none。

问题是这样的: 假设我有一个看起来像这样的字符串 -> 2017-01-05-04:44:43-06:00(格式为 yyyy-MM-dd-hh:mm:ss+/-UTC) 现在我的目标是将它按原样存储在 Oracle 数据库中,包括偏移量(据我所知,我需要将列定义为 TIMESTAMP WITH TIME ZONE)。

那么我该如何将带有偏移量的时间戳捕获到 Java 日期和时间对象中呢?我不想将时间转换为 UTC,我只想按原样存储并将其保存到数据库中。

请注意,我们使用的是 Java 6,所以我不能使用 java.time 包,我也不能使用 Joda Time。因此,除此之外的任何解决方案都将不胜感激。

谢谢。

java.time

请参阅 Java 6 和 7 的 ThreeTen-Backport project for a back-port of much of the java.time 功能(java.time 内置于 Java 8 及更高版本中)。 API 几乎匹配,因此当您最终迁移到 Java 8 或更高版本时,您只需更改 import 语句即可。

Joda-Time 项目现在处于维护模式,但正在积极维护。赞助商建议移至 java.time classes。

ISO 8601

将输入字符串中间的连字符替换为 T 以符合标准 ISO 8601 格式。 java.time classes 默认使用这些标准格式来解析和生成日期时间值的字符串表示形式。

OffsetDateTime odt = OffsetDateTime.parse( "2017-01-05T04:44:43-06:00" );

搜索堆栈溢出

I'm terribly sorry if this had been asked before

是的,你的问题都是重复的。请在 Stack Overflow 中搜索所有问题的现有答案:

  • java.time 的反向移植,ThreeTen-Backport
  • 解析包含 UTC 偏移量的字符串,OffsetDateTime class
  • 与数据库,特别是 Oracle 交换日期时间数据,JDBC 4.2 用于直接交换 java.time 对象,或者调用添加到旧 classes 的新方法进行转换to/from java.time 到 java.sql.Timestamp,否则在 pre-Java-8 转换为 Timestamp by count-from-epoch numbers.
  • 了解旧的遗留日期时间 classes 有多糟糕,您绝对应该费心将 java.time 向后移植库添加到您的项目中。

提示:不要在 Stack Overflow 网站内搜索。当您想在答案中搜索时,他们的搜索引擎偏向于问题。在 DuckDuckGo 中使用 site:whosebug.com、Google 或 Bing。


关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time项目,现在处于维护模式,建议迁移到java.timeclasses.

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

您可以直接与您的数据库交换 java.time 对象。使用 JDBC driver compliant with JDBC 4.2 或更高版本。不需要字符串,不需要 java.sql.* classes.

从哪里获得java.time classes?

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.