我的 Joda Time 格式模式是否不正确,无法在解析的 DateTime 输出中生成“T”和“Z”?

发布于 2024-10-11 14:15:43 字数 635 浏览 6 评论 0原文

使用下面的 Joda Time 的模式语法,此输入字符串:

Sunday, January 09, 2011 6:15:00 PM

变为此日期时间:

2011-01-09T06:15:00.000Z

代码:

String start = "Sunday, January 09, 2011 6:15:00 PM";

DateTimeFormatter parser1 = 
DateTimeFormat.forPattern("EEEE, MMMM dd, yyyy H:mm:ss aa");

DateTime startTime = parser1.parseDateTime(start);

此格式模式是否不正确?如果没有,TZ 在 DateTime 输出中做什么?

2011-01-09T06:15:00.000Z

Using Joda Time's pattern syntax below, this input string:

Sunday, January 09, 2011 6:15:00 PM

becomes this datetime:

2011-01-09T06:15:00.000Z

Code:

String start = "Sunday, January 09, 2011 6:15:00 PM";

DateTimeFormatter parser1 = 
DateTimeFormat.forPattern("EEEE, MMMM dd, yyyy H:mm:ss aa");

DateTime startTime = parser1.parseDateTime(start);

Is this format pattern incorrect? If not, what are the T and Z doing inside the DateTime output?

2011-01-09T06:15:00.000Z

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

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

发布评论

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

评论(3

黑凤梨 2024-10-18 14:15:43

T:表示字符串“时间部分”的开始。
区域:“Z”输出偏移。我想在这种情况下是格林威治标准时间。
资料来源:http://joda-time.sourceforge.net /apidocs/org/joda/time/format/DateTimeFormat.html

我总是使用此格式字符串: yyyy-MM-dd'T'HH:mm:ss.SSSZ

而且,是的,如果它们出现在您的字符串中,它们就不是不正确的。

T: Denotes start of "time part" of the string.
Zone: 'Z' outputs offset. I suppose in thise case is GMT.
Source:http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html

I always use this format string: yyyy-MM-dd'T'HH:mm:ss.SSSZ

And, yes, they are not incorrect, if they are present in your string.

浮光之海 2024-10-18 14:15:43

您仅显示了解析代码,而不是如何将DateTime值转换回String

我强烈怀疑您只是调用 toString(),它使用默认的 DateTime ISO8601 格式。

不要忘记 DateTime 值表示特定时区和日历系统中的某个时刻 - 它没有格式模式的概念。 “T”和“Z”不在 DateTime 值中 - 它们只是在该值的默认表示形式中。这就像当您将 int 转换为字符串时 - 它碰巧使用了十进制,但数字本身只是一个数字。

如果您想以特定方式格式化 DateTime,您应该使用

String text = formatter.print(startTime);

You've only shown the parsing code - not how you've converted the DateTime value back to a String.

I strongly suspect you're just calling toString(), which use the default DateTime ISO8601 format.

Don't forget that a DateTime value represents an instant in time in a particular time zone and calendar system - it has no concept of format patterns. The "T" and "Z" aren't in the DateTime value - they're just in the default representation of the value. It's like when you convert an int to a string - it happens to use decimal, but the number itself is just a number.

If you want to format a DateTime in a specific way, you should use

String text = formatter.print(startTime);
胡渣熟男 2024-10-18 14:15:43

您可以使用 Joda time 预定义的格式化程序,而不是创建自己的格式化程序。
您可以在org.joda.time.format.ISODateTimeFormat中找到它们。

事实上,在您的情况下,我会使用 ISODateTimeFormat.basicDateTimeNoMillis 格式化程序。我认为它具有您正在寻找的模式:yyyyMMdd'T'HHmmssZ

Instead of creating your own formatter, you can use one predefined by Joda time.
You will find them in org.joda.time.format.ISODateTimeFormat.

In fact, in your case I would use ISODateTimeFormat.basicDateTimeNoMillis formatter. I think it has the pattern you were looking for: yyyyMMdd'T'HHmmssZ

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