首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JodaTime PeriodFormatter

JodaTime PeriodFormatter
EN

Stack Overflow用户
提问于 2016-02-24 07:52:37
回答 1查看 665关注 0票数 0

我有以下PeriodFormatter:

代码语言:javascript
复制
PeriodFormatter periodFormatter = new PeriodFormatterBuilder().printZeroAlways().minimumPrintedDigits(2).appendHours().appendSeparator(":")
        .appendMinutes().rejectSignedValues(false).maximumParsedDigits(2).toFormatter();

如果我解析-03:00 (三个小时):

代码语言:javascript
复制
final Duration hoursDuration = periodFormatter.parsePeriod(hours)

但是,如果我解析例如-00:43 (45分钟),就会得到一个实值持续时间,因为正确的格式应该是-00:-43

我现在的问题是,是否有可能使用periodFormatter.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-24 11:54:54

--首先我让您的代码可编译:

代码语言:javascript
复制
PeriodFormatter periodFormatter = 
    new PeriodFormatterBuilder().printZeroAlways().minimumPrintedDigits(2)
    .appendHours().appendSeparator(":")
    .appendMinutes().rejectSignedValues(false).maximumParsedDigits(2).toFormatter();
Period p1 = periodFormatter.parsePeriod("-03:00"); // PT-3H
System.out.println(p1);
Period p2 = periodFormatter.parsePeriod("-00:43"); // PT43M
System.out.println(p2);

对所观察行为的解释:

从一开始,Joda-Time就以一种违反直觉的方式处理任何时期的迹象。符号与整个周期并不是相关的,而只是与周期的单个独立成分相关的。

  • 第一种情况是"-03:00“=>,仅小时分量为负(分钟为零)。
  • 第二种情况是"00:43“,=>时间分量为零,所以符号没有影响,而分钟分量是正的,因为它前面没有负号。

对这种行为的看法是不同的。虽然Joda团队似乎认为这是一种增强和有用的特性,但像我这样的人认为这很糟糕。例如,可以将周期构造为P1M-30D。这样的时期是正的、负的还是零的?我们不太清楚。结果是,周期松开了属性,就像时间线上有向向量的长度(持续时间的特征)。

据我所知,在Joda-Time没有机会改变这种行为。如果要将"-00:43“解析为-PT43M,请考虑以下选项:

a)手动解决方案:

代码语言:javascript
复制
String input = "-00:43";
boolean negative = input.charAt(0) == '-';
Period p3 = periodFormatter.parsePeriod(input.replace("-", ""));
if (negative) {
    p3 = p3.negated();
}
System.out.println(p3); // PT-43M

b)使用我的库

这是解决你的具体问题的大炮,但否则它是值得一看的,因为标准化、格式化或解析任何持续时间的可能性是巨大的。Time4J拒绝混合符号,因此该标志只能出现在整个持续时间的前面。

代码语言:javascript
复制
Duration<ClockUnit> d = Duration.formatter(ClockUnit.class, "-hh:mm").parse(input);
System.out.println(d); // -PT43M
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35596233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档