Java 日期格式允许 - / 或 .作为日期内的分隔符
解析可以采用以下格式之一的日期的最好方法是什么,而
"dd-MM-yyyy HH:mm"
"dd/MM/yyyy HH:mm"
"dd.MM.yyyy HH:mm"
无需创建 3 个 SimpleDateFormat 并针对每个格式进行解析。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
将源字符串“调整”为规范格式可能是最简单的:
然后使用“-”来使用格式字符串。
请注意,这是非常具体的,仅完全替换您感兴趣的字符,以避免不必要的副作用。
It's probably easiest to "tweak" the source string into a canonical format:
Then use the format string using "-".
Note that this is very specific, only replacing exactly the characters you're interested in, to avoid unwanted side-effects.
您能否先运行两个替换操作,以便将所有三种格式减少为单一格式?
Could you run two replace operations first, so that you reduce all three formats to a single one?
您可以使用 Apache commons lang DateUtils.parseDate
好吧,它在内部创建了 SimpleDateFormats,但这有什么问题吗?
You may use Apache commons lang DateUtils.parseDate
Well, internally it creates SimpleDateFormats, but whats wrong with that?
java.time
您可以使用
DateTimeFormatter
它允许您使用方括号指定可选的内容。输出:
从 跟踪:日期时间。
请注意,旧版日期时间 API(
java.util
日期时间类型及其格式化 APISimpleDateFormat
)已过时且容易出错。建议完全停止使用它们并切换到 java.time,即 现代日期时间 API* 。* 无论出于何种原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport 将大部分 java.time 功能向后移植到 Java 6 和 Java 6 7. 如果您正在处理 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 通过脱糖提供 Java 8+ API 和 如何在Android项目中使用ThreeTenABP。
java.time
You can do it using
DateTimeFormatter
which allows you to specify optional things using square brackets.Output:
Learn more about the modern date-time API from Trail: Date Time.
Note that the legacy date-time API (
java.util
date-time types and their formatting API,SimpleDateFormat
) are outdated and error-prone. It is recommended to stop using them completely and switch tojava.time
, the modern date-time API* .* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and How to use ThreeTenABP in Android Project.
正则表达式怎么样:
在代码中,这意味着这样的事情:
how about a regex:
In code this would mean something like this:
使用正则表达式自行完成:
但请注意,这确实允许混合不同的分隔符,例如“17-09/2009 12:00”将被允许。
Doing it yourself with a regular expression:
Note however that this does allow mixing different separators, e.g. "17-09/2009 12:00" would be allowed.
ParseExact 可以采用一系列格式。您仍然需要指定所有格式,但这是一个操作。
ParseExact can take an array of formats. You still have to specify all formats, but it's a single operation.