【问题标题】:Converting specific string to Date using SimpleDateFormat使用 SimpleDateFormat 将特定字符串转换为日期
【发布时间】:2017-06-12 22:01:04
【问题描述】:

我有这个字符串,我想将其转换为 java Date 对象:
"Mon Jun 12 2017 21:00:15 GMT+0200 (W. Europe Summer Time)"

我要做的第一件事是在第一个 '(' 之前拆分字符串,然后删除所有尾随空格,这样我就剩下:
"Mon Jun 12 2017 21:00:15 GMT+0200"

现在我正在尝试使用以下SimpleDateFormat 模式解析它:
"E M d y H:m:s 'GMT'Z"

很遗憾,这行不通。我尝试了一些变化,但没有任何效果。是否可以将该特定字符串转换为日期?

【问题讨论】:

  • 顺便说一句,您还在使用过时的SimpleDateFormatDate 类吗?任何原因?我建议OffsetDateTime.parse("Mon Jun 12 2017 21:00:15 GMT+0200", DateTimeFormatter.ofPattern("EEE MMM d uuuu HH:mm:ss 'GMT'XX", Locale.ENGLISH))。现代日期和时间类使用起来要好得多(格式模式字母或多或少相同)。
  • PS 我曾希望将所有 GMT+0200 与模式 OOOO(大写字母 O)匹配,但它不起作用。它似乎需要一个冒号:GMT+02:00。这可能是 Java 8 中的一个错误,如果是这样,它可能会在 Java 9 中修复。
  • @OleV.V.我使用Date 类,因为我在一个对象中有时间和日期,这使得使用数据库类型 DATETIME 可以轻松地持久化到 MySQL 数据库。我使用了 SDF,因为这就是我在寻找将字符串转换为时间对象的方法时遇到的所有问题。在这种情况下使用什么现代类?
  • 我从 2011 年左右就没有使用过 MySQL。我似乎在使用 Connector/J 5.1 或更高版本时读到过,您可以直接在数据库中存储和检索较新的类。存储一个Instant,它对应于老式的Date 类。在我的第一条评论中使用的 OffsetDateTime 类有一个 toInstant 方法,它的功能与名称相同。请搜索您的文档和网络以获取详细信息。

标签: java simpledateformat datetime-parsing


【解决方案1】:

您使用的模式不正确。如果您有 3 个字母长的星期几的缩写,则应使用 EEE,依此类推。

试试"EEE MMM dd yyyy HH:mm:ss 'GMT'z"

【讨论】:

  • 维克多,你的陈述结尾不正确。您仍应在模式中添加“GMT”:EEE MMM dd yyyy HH:mm:ss 'GMT'Z
  • 非常感谢!这在我使用的文档中并不是很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2017-06-05
  • 2018-11-03
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多