gpt4 book ai didi

java - 乔达时代打印

转载 作者:行者123 更新时间:2023-11-30 04:04:51 25 4
gpt4 key购买 nike

我想以“2天3小时5分8秒”的形式打印两个日期之间的差异。

我正在使用此代码调用 Joda-Time图书馆,但我遇到了一些麻烦。

Calendar cal = Calendar.getInstance();
DateTime firstSeen = new DateTime(cal.getTime());

cal.add(Calendar.HOUR, 24*8);
cal.add(Calendar.MINUTE, 10);
cal.add(Calendar.SECOND, 45);

DateTime lastSeen = new DateTime(cal.getTime());
Period period = new Period(firstSeen, lastSeen);

PeriodFormatter daysHoursMinutesSeconds = new PeriodFormatterBuilder()
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();

String periodFormatted;
periodFormatted = daysHoursMinutesSeconds.print(period);
System.out.println(periodFormatted);

应该打印的是“8天10分45秒”。相反,我得到“1 天 10 分 45 秒”;日子似乎已经融入了一周。如何告诉格式化程序忽略溢出并对溢出到第一个单元的内容求和?

最佳答案

这是正确的输出,因为周期为“1 周 1 天,45 分钟”并且未打印周字段:

package com.stackoverflow.so21002436;

import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;

public class App {
public static void main(final String[] args)
{
final DateTime firstSeen = DateTime.now();
final DateTime lastSeen = firstSeen.plusDays(8).plusMinutes(10).plusSeconds(45);

final Period period = new Period(firstSeen, lastSeen);
System.err.println(period); // P1W1DT10M45S, ie. 1 day, 10 minutes and 45 seconds

final PeriodFormatter daysHoursMinutesSeconds = new PeriodFormatterBuilder().appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();

final String periodFormatted = daysHoursMinutesSeconds.print(period);
System.out.println(periodFormatted);
}
}

或使用特定的 PeriodType :

package com.stackoverflow.so21002436;

import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.PeriodType;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;

public class App {
public static void main(final String[] args)
{
final DateTime firstSeen = DateTime.now();
final DateTime lastSeen = firstSeen.plusDays(8).plusMinutes(10).plusSeconds(45);

final Period period = new Period(firstSeen, lastSeen, PeriodType.dayTime());
System.err.println(period); // P8DT10M45S, ie. 8 days, 10 minutes and 45 seconds

final PeriodFormatter daysHoursMinutesSeconds = new PeriodFormatterBuilder().appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();

final String periodFormatted = daysHoursMinutesSeconds.print(period);
System.out.println(periodFormatted);
}
}

参见Period(ReadableInstant, ReadableDuration, PeriodType)

关于java - 乔达时代打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com