繁体   English   中英

解析Joda-Time Partials

[英]Parsing Joda-Time Partials

我想从Strings中生成Partials,但在支持它的API中找不到任何内容。 显然,我可以在Joda-Time框架之外编写自己的解析器并创建Partials,但我无法想象API还没有能力执行此操作。

使用threeten(JSR-310)将是一个可接受的解决方案,但它似乎不支持Partials。 我不知道这是由于它的alpha状态,还是部分概念是以不同的方式处理,我还没有发现。

将String(2011,02 / 11等)转换为Partial的最佳方法是什么?

我扩展了DateTimeParserBucket。 我的扩展类拦截对saveField()方法的调用,并在委托给super之前存储字段类型和值。 我还实现了一个使用这些存储的字段值来创建Partial的方法。

我能够将我的存储桶实例传递给DateTimeParser.parseInto(),然后让它创建Partial。

它有效,但我不能说我对Joda-Time印象深刻 - 因为它不支持解析Partials开箱即用。 缺少DateTimeFormatter.parsePartial(String)是一个明显的遗漏。

您必须首先定义您将接受的Partials的有效格式。 没有类只会采用文本并推断出Partial的最佳匹配。 根据区域设置,用户偏好等,它太主观了。因此无法绕过所有有效输入格式的列表。 要使这些相互排斥是非常困难的,所以应该有优先事项。 例如,您可能希望mm/ddmm/yy都是有效格式。 如果我给你字符串02/11 ,哪一个应该优先?

一旦你已经确定完全有效的格式,你应该使用DateTimeFormat.forPattern创建DateTimeFormatter的每一个。 然后你可以使用每个格式化程序来尝试parseInto一个MutableDateTime 然后,遍历MutableDateTime每个字段并将值传输到Partial

不幸的是,在Joda库中没有更好的方法来处理这个问题。

ISODateTimeFormat允许部分打印。 正如您所说, DateTimeFormatter上没有解析方法(尽管您可以解析为LocalDate并解释它)。

ThreeTen / JSR-310具有替换PartialDateTimeFields类。 支持将partials解析为CalendricalMerger ,但是可能无法将其转换回DateTimeFields

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM