我们要求将日期字符串“ddMMM”转换为“yyyy-MM-dd”。
例如:“30SEP” - >“2019-09-30”和“15JAN” - >“2020-01-15”(如果该日期是当前年份的过去,则采用下一年的日期)
MonthDay
Evan的答案很好,但我建议解析你的输入是什么:一个月。那是一堂课!见MonthDay
。
DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern( "ddMMM" ).toFormatter() ;
MonthDay md = MonthDay.parse( input , f ) ;
现在确定一个日期。为此你需要一个时区。对于任何给定的时刻,日期在全球范围内因地区而异。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
相比。
LocalDate target = md.atYear( today.getYear() ) ;
if( target.isBefore( today ) ) {
target.plusYears( 1 ) ;
}
DateTimeFormatter是解析日期和时间的好工具,但它需要一年作为输入。这需要当前年份,但如果输出的日期在此之前,则会增加一年。
String dateString = "29FEB";
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("ddMMMyyyy").toFormatter();
LocalDate dateOfInterest = LocalDate.parse( dateString + LocalDate.now().getYear(), dateTimeFormatter );
if( dateOfInterest.isBefore( LocalDate.now() ) )
dateOfInterest = LocalDate.parse( dateString + LocalDate.now().plusYears(1).getYear(), dateTimeFormatter );
然后可以按照您要查找的格式将LocalDate转换为字符串,如下所示。
dateOfInterest.format( DateTimeFormatter.ofPattern( "yyy-MM-dd" ) );
您可以仅将日期和月份的输入作为字符串数组。获取当前日期使用现在您有两个值...比较两者并将年份添加到日期。
import java.util.Calendar;
import java.util.Scanner;
public class DateCalendar {
public static void main(String ar[]){
String[] monthName = {"January", "February",
"March", "April", "May", "June", "July",
"August", "September", "October", "November",
"December"};
int count = 0;
int presentMonth =0;
int userMonth = 0;
int finalYear = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Enter Date :");
int userdate = sc.nextInt();
System.out.println("Enter Month :");
String usrMonth = sc.next();
Calendar now = Calendar.getInstance();
int presentDate = now.get(Calendar.DATE);
presentMonth = (now.get(Calendar.MONTH))+1;
//Convert user input Month String to int
count = 0;
while(count<12){
if(monthName[count].equals(usrMonth)){
userMonth = count + 1;
// array starts from 0
break;
}
else{
count++;
}
}
//convert to final year and
if(userMonth<presentMonth){
finalYear = (now.get(Calendar.YEAR))+1;
}
else if(userMonth>presentMonth){
System.out.println("THe userMonth is : "+userMonth+" and presentMonth is : "+presentMonth);
finalYear = now.get((Calendar.YEAR));
}
else if(userMonth==presentMonth){
if(userdate>=presentDate){
finalYear = now.get((Calendar.YEAR));
}
else if(userdate<presentDate){
finalYear = (now.get(Calendar.YEAR))+1;
}
}
System.out.println("THe final year is : "+finalYear);
System.out.println("THe final month is "+monthName[userMonth-1]);
System.out.println("the final date is : "+userdate);
}
}`
`