Преобразовать строку даты из "ddMMM" в "yyyy-MM-dd", используя Java 8 - PullRequest
0 голосов
/ 22 апреля 2019

У нас есть требование преобразования строки даты "ddMMM" в "yyyy-MM-dd".

Например: "30SEP" -> "2019-09-30" и "15JAN" -> "2020-01-15" (если дата в прошлом году для текущего года, то взять дату следующего года)

Ответы [ 3 ]

1 голос
/ 22 апреля 2019

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 голос
/ 23 апреля 2019

MonthDay

Ответ Эвана хорош, но я бы посоветовал вам проанализировать ваш вклад: месяц-день.Для этого есть класс!См. 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 ) ;
} 
0 голосов
/ 22 апреля 2019

В качестве строкового массива вы можете использовать ввод только даты и месяца. Получить текущую дату, используя Теперь у вас есть оба значения ... сравните оба и добавьте год к дате.

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

`

...