Java 格式 yyyy-MM-dd'T'HH:mm:ss.SSSz 到 yyyy-mm-dd HH:mm:ss

新手上路,请多包涵

我正在尝试将 yyyy-MM-dd’T’HH:mm:ss.SSSz 格式的日期格式化为 yyyy-mm-dd HH:mm:ss,这应该很容易,但我无法让它工作.

必须解析的日期格式为:2012-10-01T09:45:00.000+02:00

现在我使用这个简单的日期格式化程序来格式化它:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz", Locale.FRANCE);

但这给出了类似于 2012-10-01T09:45:00.000UTC+00:00 的输出。

我还尝试使用“yyyy-MM-dd’T’HH:mm:ss.SSSZ”作为模式和“yyyy-MM-ddHH:mm:ss”。后者以 2012-10-01T09:45:00 关闭的形式返回一个日期,但还没有。

我认为将 T 去掉子字符串会有点混乱并且无缘无故地产生开销,因此格式化这些日期的正确方法是什么?

为了说明,我想将 2012-10-01T09:45:00.000+02:00 转换为 2012-10-01 09:45:00

干杯!

原文由 Gooey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(time);
String formattedTime = output.format(d);

这行得通。您必须使用两种 SimpleDateFormats,一种用于输入,一种用于输出,但它会给您您想要的。

原文由 ctlevi 发布,翻译遵循 CC BY-SA 3.0 许可协议

java.time

我们有解决这个问题的新技术:Java 8 及更高版本中内置的 java.time 框架。

您的输入字符串采用标准 ISO 8601 格式。该标准在 java.time 类中默认用于解析/生成日期时间值的文本表示。

 OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );

你的问题表明你想截断到一整秒。

 OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );

您似乎想省略偏移量和时区信息。预定义的格式化程序 DateTimeFormatter.ISO_LOCAL_DATE_TIME 就是这样做的。

显然你想在中间使用一个空格而不是标准的 T 。您可以为此定义自己的格式化程序,但我只会执行字符串操作以将 T 替换为 SPACE。

 String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );

简单的字符串操作

正如对问题的评论所暗示的那样,严格来说,您可以通过仅使用字符串而不转换为任何日期时间对象来实现您的目标。但是我在这里提供这个答案假设您可能有其他业务逻辑来处理这些日期时间值。


Java 中的日期时间类型表,包括现代的和传统的


关于 java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat

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

要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 中搜索许多示例和解释。规范是 JSR 310

您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要 java.sql.* 类。

在哪里获取 java.time 类?

  • Java SE 8Java SE 9 和更高版本
    • 内置。
    • 带有捆绑实现的标准 Java API 的一部分。
    • Java 9 添加了一些次要功能和修复。
  • Java SE 6Java SE 7
    • ThreeTen -Backport 中的大部分 java.time 功能都反向移植到 Java 6 和 7。
  • 安卓

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表格

ThreeTen-Extra 项目用附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 IntervalYearWeekYearQuarter 等等

原文由 Basil Bourque 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏