解析非标准日期格式,如““0yyyyMMdd”

发布于 2024-09-07 16:04:34 字数 382 浏览 6 评论 0原文

我有日期,以 +0yyyyMMdd 格式进入我们的系统,

例如 2011 年 3 月 12 日是 +020110312

目前它肯定是 + 符号和 Date 之前的一个 0,但将来它可能会不止一个 0,例如 +000020110312

是否可以用标准 Java java.text.DateFormat.parse(String source) 解析它?

或者我应该编写自定义解析方法?

谢谢。

I Have Date, that comes to our system in format +0yyyyMMdd

For instance 12 March,2011 is +020110312

For now it's definitely + symbol and one 0 before Date, but in future it may be more than one zeros,e.g. +000020110312

Is it possible to parse it with standard Java java.text.DateFormat.parse(String source)?

Or I should write custom parsing method?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

蝶舞 2024-09-14 16:04:34

我猜 +0 是一个时区指示器,所以你可以尝试:

new SimpleDateFormat("ZyyyyddMM")

唉,这不会立即起作用。

为了使其正常工作,请获取从 0length - 8 的子字符串,并将其扩展为四位数字以满足时区的 RFC。请参阅 SimpleDateFormat

I'd guess the +0 is a timezone indicator, so you can try:

new SimpleDateFormat("ZyyyyddMM")

Alas, this doesn't work immediately.

In order to make it work, get a substring from 0 to length - 8 and expand it to be four digits to meet the RFC for the timezone. See SimpleDateFormat

南冥有猫 2024-09-14 16:04:34

如果 +0 前缀是常量,则可以使用单引号引用它。

String string = "+020110312";
Date date = new SimpleDateFormat("'+0'yyyyMMdd").parse(string);
System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011

(根据我的时区,结果是正确的)

请注意,月份由 MM 表示,而不是 mmmm 代表分钟。使用 mm 数月会破坏解析结果。

另请参阅:


更新:由于将来似乎会有所不同“但将来可能会超过一个零”,因此您可以更好地考虑对最后 8 个字符进行子串。

String string = "+020110312";
Date date = new SimpleDateFormat("yyyyMMdd").parse(string.substring(string.length() - 8));
System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011

If the +0 prefix is a constant, then you can just quote it using singlequotes.

String string = "+020110312";
Date date = new SimpleDateFormat("'+0'yyyyMMdd").parse(string);
System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011

(outcome is correct as per my timezone)

Note that months are represented by MM not mm. The mm represents minutes. Using mm for months would corrupt the parsing outcome.

See also:


Update: since that seem to vary in the future "but in future it may be more than one zeros", you can better consider to substring the last 8 characters.

String string = "+020110312";
Date date = new SimpleDateFormat("yyyyMMdd").parse(string.substring(string.length() - 8));
System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011
瘫痪情歌 2024-09-14 16:04:34

我将从您的表示中提取最后 8 个字符,然后解析它。 (我不确定你是否可以安全地避免它)

I would substring the last 8 chars from your representation and then parse it. (I am not sure if you can safely avoid it)

翻了热茶 2024-09-14 16:04:34

您可以使用 SimpleDateFormat 解析日期部分。

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
df.parse("20110312");

但您需要去掉“+000”前缀。

You could parse the date portion using SimpleDateFormat.

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
df.parse("20110312");

But you would need to strip off the "+000" prefix.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文