将字符串解析为 JodaTime 时出现无效格式问题

发布于 2024-11-29 17:53:40 字数 837 浏览 1 评论 0原文

String dateString = "20110706 1607";
    DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern("YYYYMMDD HHMM");
    DateTime dateTime = dateStringFormat.parseDateTime(dateString);

结果堆栈跟踪:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "201107206 1607" is malformed at " 1607"
    at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:644)
    at org.joda.time.convert.StringConverter.getInstantMillis(StringConverter.java:65)
    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:171)
    at org.joda.time.DateTime.<init>(DateTime.java:168)
......

有什么想法吗?如果我使用模式“YYYYMMDD”将字符串截断为 20110706,它可以工作,但我还需要小时和分钟值。奇怪的是,我可以使用相同的模式“YYYYMMDD HHMM”将 Jodatime DateTime 转换为字符串,没有问题

感谢您的查看

String dateString = "20110706 1607";
    DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern("YYYYMMDD HHMM");
    DateTime dateTime = dateStringFormat.parseDateTime(dateString);

Resulting stacktrace:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "201107206 1607" is malformed at " 1607"
    at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:644)
    at org.joda.time.convert.StringConverter.getInstantMillis(StringConverter.java:65)
    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:171)
    at org.joda.time.DateTime.<init>(DateTime.java:168)
......

Any thoughts? If I truncate the string to 20110706 with pattern "YYYYMMDD" it works, but I need the hour and minute values as well. What's odd is that I can convert a Jodatime DateTime to a String using the same pattern "YYYYMMDD HHMM" without issue

Thanks for looking

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

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

发布评论

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

评论(1

滴情不沾 2024-12-06 17:53:40

看看你的模式 - 你指定了“MM”两次。这不可能是对的。这将尝试从文本的两个不同位解析同一字段(在本例中为月份)两次。您希望哪一个获胜?您想要:

DateTimeFormat.forPattern("yyyyMMdd HHmm")

查看 DateTimeFormat< 的文档/code>看看一切都意味着什么。

请注意,虽然使用该模式调用 toString 将生成一个字符串,但它不会生成您想要的字符串。如果由于外壳原因输出甚至包含“YYYY”和“DD”,我不会感到惊讶,尽管我现在无法测试它。至少你会看到月份两次,而不是最后出现分钟。

Look at your pattern - you're specifying "MM" twice. That can't possibly be right. That would be trying to parse the same field (month in this case) twice from two different bits of the text. Which would you expect to win? You want:

DateTimeFormat.forPattern("yyyyMMdd HHmm")

Look at the documentation for DateTimeFormat to see what everything means.

Note that although calling toString with that pattern will produce a string, it won't produce the string you want it to. I wouldn't be surprised if the output even included "YYYY" and "DD" due to the casing, although I can't test it right now. At the very least you'd have the month twice instead of the minutes appearing at the end.

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