我的代码应该可以打印出输入日期和现在之间的差额。然后将根据ISO LocalDate格式格式化输出。
解析方法无法正确处理格式。
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.io.*;
import java.time.*;
//Main class
public class TimeBetween{
public static void main(String[] args){
String dateFormat = "MMMM d, yyyy";
LocalDate aDate = null;
boolean validStr = false;
//parse method not handling formatting correctly.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(validStr==false){
System.out.print("Enter a date: ");
//Try and catch
try {
String dateEntered = br.readLine();
aDate = LocalDate.parse(dateEntered,formatter);
validStr = true;
}catch(IOException | DateTimeParseException ex){
validStr = false;
}
}
System.out.println("Date entered was: "+aDate);
LocalDate now = LocalDate.now();
Period between;
if(aDate.isBefore(now)){
between = Period.between(aDate,now);
}else{
between = Period.between(now,aDate);
}
int years = between.getYears();
int months = between.getMonths();
int days = between.getDays();
//Printing out year month and day differences
System.out.println("There are" +years+"years"+months+"months"+days+"days");
}
}
答案 0 :(得分:0)
当您的程序出现问题时,要求用户以预期的情况输入月份,例如,2月的大写F
和小写的ebruary
。 (编辑:)模式字母大写M
用于月份,而小写m
表示分钟。因此,即使不应该以这种方式键入月份,格式模式字符串中的M
也必须使用大写,并且如果将日期格式化为字符串,则也不能使用大写格式。
提示:使用格式化程序进行解析无法正常工作时,请尝试使用相同的格式化程序格式化值,以查看输入字符串的外观。例如:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern(dateFormat, Locale.forLanguageTag("en-IE"));
System.out.println(LocalDate.now(ZoneId.of("Europe/Dublin")).format(formatter));
示例输出:
2018年10月17日
在这里您可以看到月份不是大写。
提示2:为格式化程序提供明确的语言环境,因此您知道它也可以在具有不同默认语言环境的计算机上正常工作,如果有一天您碰巧使用自己计算机的语言环境设置。
我认为这不是您想要的,但是为了完整起见:为了允许以所有大写字母输入月份,请使用DateTimeFormatterBuilder
及其parseCaseInsensitive
方法,如下所示:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(dateFormat)
.toFormatter(Locale.forLanguageTag("en-IE"));
此更改是一个示例会话:
Enter a date: FEBRUARY 27, 1999
Date entered was: 1999-02-27
There are19years7months19days
以日历日期的ISO 8601格式输出日期。而且我相信该期间的计算是正确的。
DateTimeFormatter
documentation,您可以在其中看到大写和小写字母,并研究m
和M
,d
和D
和{{1 }}和y
。