joda PeriodFormatter打印null

时间:2016-01-11 14:08:03

标签: java android jodatime

我不明白我做错了什么,我一定错过了什么。

private PeriodFormatter fmt = new PeriodFormatterBuilder()
            .printZeroNever()
            .appendHours()
            .appendSeparator(":")
            .minimumPrintedDigits(2)
            .appendMinutes()
            .appendSeparator(":")
            .minimumPrintedDigits(2)
            .appendSeconds()
            .toFormatter();

然后

Period period = new Period(DateTime.now().getMillis()-startDate.getMillis(), PeriodType.millis());

Log.i("date", "fmt.print(period): " + fmt.print(period));
Log.i("date", "period.toString() : " + period.toString());
Log.i("date", "DateTime.now().getMillis()-startDate.getMillis() : " + (DateTime.now().getMillis()-startDate.getMillis()));

我的日志

fmt.print(period): 
period.toString() : PT12.166S
DateTime.now().getMillis()-startDate.getMillis() : 12166

由于

--- EDIT

确定找到了,问题是通过在句点构造函数中指定“PeriodType.millis()”我得到了这样的句点:0min 0秒152150 ms 我不知道我是否清楚但这是我的错误,我删除了这个论点,现在它就像一个魅力。

Period period = new Period(startDate.getMillis(), DateTime.now().getMillis());

3 个答案:

答案 0 :(得分:0)

Period类具有以下Contructor:

Period(long startInstant, long endInstant, PeriodType type)

尝试更改:

     Period period = new Period(DateTime.now().getMillis()-startDate.getMillis(), PeriodType.millis());

到:

  Period period = new Period(DateTime.now().getMillis(), startDate.getMillis(), PeriodType.millis());

答案 1 :(得分:0)

它打印出一个空字符串是一种奇怪的行为,但这是因为你要求它打印输出的类型为毫秒,但你没有在格式化程序定义中包含.appendMillis()。

应该是这样的:

private PeriodFormatter fmt = new PeriodFormatterBuilder()
        .printZeroAlways()
        .appendHours()
        .appendSeparator(":")
        .minimumPrintedDigits(2)
        .appendMinutes()
        .appendSeparator(":")
        .minimumPrintedDigits(2)
        .appendSeconds()
        .appendSeparator(".")
        .appendMillis()
        .toFormatter();

答案 2 :(得分:0)

问题在于通过指定" PeriodType.millis()"在句号构造函数中,我得到了这样一段时间:0分0秒152150毫秒我不知道我是否清楚但这是我的错误,我删除了这个论点,现在它就像一个魅力。

Period period = new Period(startDate.getMillis(),DateTime.now().getMillis());