我正在编写一个程序来使用JODA时间计算Java的年龄差,并且在计算小时()之间,它没有考虑到AM和PM。这是我的代码:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String DOB = "";
String NOW = "";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm aa");
Date dob = null;
Date now = null;
try {
System.out
.println("Enter the date and time of your birth using the mm/dd/yyyy and the hh:mm AM/PM format: ");
DOB = scan.nextLine();
System.out
.println("Enter the date and time using the mm/dd/yyyy and the hh:mm AM/PM format: ");
NOW = scan.nextLine();
dob = format.parse(DOB);
now = format.parse(NOW);
DateTime dob1 = new DateTime(dob);
DateTime now1 = new DateTime(now);
System.out.print("You are ");
System.out.print(Years.yearsBetween(dob1, now1).getYears()
+ " years, ");
System.out.print(Months.monthsBetween(dob1, now1).getMonths() % 12
+ " months, ");
System.out.print(Days.daysBetween(dob1, now1).getDays() % 60
+ " days, ");
System.out.print(Hours.hoursBetween(dob1, now1).getHours() % 12
+ " hours, ");
System.out.print("and "
+ Minutes.minutesBetween(dob1, now1).getMinutes() % 60
+ " minutes old!");
} catch (Exception e) {
e.printStackTrace();
}
}}
如果我出生日期的输入是" 01/01/2014 12:00 AM",而我目前的输入是" 01/01/2014 12:00 pm",则结果是:"您是0年,0个月,0小时,0分钟大。"何时应该年满12小时。有没有办法来解决这个问题?我的猜测是有某种方法可以实现halfdayofday()方法并在我的 datetime 's上调用它,但是我还没有找到它...谢谢您的任何帮助!(顺便说一句,我正在使用12小时的时间进行输入,但是在解析时仍然接受13:00,当它应在12:00最大化时!)
您在
之间的小时数中进行模拟12Hours.hoursBetween(dob1, now1).getHours() % 12
so
12 % 12 = 0
您的工作太努力了。
joda time提供了精确完成这项工作的课程:PeriodFormatter
和PeriodFormatterBuilder
。
请参阅Balusc。
的答案答案显示这样的代码:
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendSeconds().appendSuffix(" seconds agon")
.appendMinutes().appendSuffix(" minutes agon")
.appendHours().appendSuffix(" hours agon")
.appendDays().appendSuffix(" days agon")
.appendWeeks().appendSuffix(" weeks agon")
.appendMonths().appendSuffix(" months agon")
.appendYears().appendSuffix(" years agon")
.printZeroNever()
.toFormatter();