我有两个DateTimes,一个是时间'since'和'now'
我需要的是得到两者之间的时间
我的问题是进入我想要得到它的格式:
的例子:Since = '17 April 2010'Now = '15 April 2011'
我想要'0年11个月29天'
如果是'13 april 2010',结果应该是这样的:"1年0个月零2天"
我不太明白你的问题。听起来你想要:
DateTime since = ...;
DateTime now = ...;
Period period = new Period(since, now, PeriodType.yearMonthDay());
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();
如果不是这样,你能再详细说明一下吗?
java.time
下面引用的是来自Joda-Time:
主页的通知注意,从Java SE 8开始,用户被要求迁移到Java。time (JSR-310)——JDK的核心部分,取代了这个项目。
使用java.time
的解决方案,现代日期-时间API:
- 使用
Period#between
获取两个LocalDate
s之间的周期。 请注意,字符串中的月份名称是小写的,因此,您需要使用 - 不要在没有
Locale
的情况下使用DateTimeFormatter
。
parseCaseInsensitive
函数构建DateTimeFormatter
。import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("d MMMM uuuu")
.toFormatter(Locale.ENGLISH);
LocalDate since = LocalDate.parse("17 april 2010", dtf);
LocalDate now = LocalDate.parse("15 april 2011", dtf);
Period period = Period.between(since, now);
String strPeriod = String.format("%d years %d months %d days", period.getYears(), period.getMonths(),
period.getDays());
System.out.println(strPeriod);
}
}
输出:0 years 11 months 29 days
<<p> 在线演示/kbd> 从Trail: Date Time了解更多关于现代日期时间API的信息。
*出于任何原因,如果你必须坚持Java 6或Java 7,你可以使用ThreeTen-Backport,它支持大部分 Java。time功能到Java 6 &7. 如果你正在为一个Android项目工作,你的Android API级别仍然不符合Java-8,检查Java 8+可用的API,通过desugaring和如何在Android项目中使用ThreeTenABP。