使用Java 8将日期字符串从“ddMMM”转换为“yyyy-MM-dd”

问题描述 投票:-4回答:3

我们要求将日期字符串“ddMMM”转换为“yyyy-MM-dd”。

例如:“30SEP” - >“2019-09-30”和“15JAN” - >“2020-01-15”(如果该日期是当前年份的过去,则采用下一年的日期)

java simpledateformat datetime-format date-conversion localtime
3个回答
1
投票

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 ) ;
} 

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" ) );

-1
投票

您可以仅将日期和月份的输入作为字符串数组。获取当前日期使用现在您有两个值...比较两者并将年份添加到日期。

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);
    }
}`

`

© www.soinside.com 2019 - 2024. All rights reserved.