【发布时间】:2016-01-13 01:52:40
【问题描述】:
我有一个代表日期的字符串。 我不知道字符串的日期格式。但仅作为示例,它可能是任何一个
- 2015-10-14T16:41:42.000Z
- 2015-10-14T19:01:53.100+01:00
- 2015-10-14 05:20:29
或网站可用于在元标记中描述日期的任何有效格式(因此该格式将是官方的,而不是异想天开的,但可能性并不小)。
我可以使用 joda-time 来解决这个问题吗? java.util.Date 或者别的怎么样?
更新
我想我找到了与我正在寻找的 Javascript 等价物
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
但我需要 Java 的答案。
【问题讨论】:
-
这两个建议都需要我事先知道格式。我的问题的标题指定了“未知”格式:)。你们知道有什么方法可以为我的情况获取所有可能的日期格式吗? (当然,希望这是一个非常小的集合)。我不介意编写多个解析器,但问题是格式可以是对包含日期的 html 元标记有效的任何内容。
-
没有“简单”的答案,一般的答案是使用格式列表,并继续尝试将值与格式列表进行转换,直到一个有效
-
@Gimby 您的评论既不明智,也没有帮助,也没有必要:OP 提供了一个链接,其中 JavaScript 实际存在这样的功能。所以这是一个有价值的问题。也许 Google 或 Oracle 或 joda-time 或任何负责创建权威 Java 函数的人都应该注意。像这样的 Java 函数对许多开发人员来说是无价的。
-
@KatedralPillon 你的(假设总是 24 小时制)看起来像
4-digit-year, literal_dash, 2-digit-month, literal_dash, 2-digit-day, one-space-or-literal_T, 2-digit-hour, literal_colon, 2-digit-minute, literal_colon, 2-digit-second(等)。正则表达式(不检查有效范围)是 like\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(\.\d{3})?(.*)?(添加适当的捕获组以提取片段)(\.\d{3})?是可选的 3 位数的百分之一秒;最后的(.*)?是可选的时区信息,需要更多的解析来判断它是一个区域(Z、EST 等)还是一个偏移量(+01:00)