Como posso tornar um zero inicial no DateTime-Pattern opcional

Eu tenho um campo de entrada do usuário e gostaria de analisar a data dele, o que quer que ele coloque.

O usuário pode fornecer à data um zero à esquerda ou sem um, então eu quero poder analisar uma entrada como esta

02.05.2019

e também isso

2.5.2019

Mas, até onde sei, não há como tornar o zero inicial opcional, sempre tenha 2 dígitos como 01, 03, 12 e assim por diante, ou apenas os dígitos necessários, como 1, 3, 12.

Então, aparentemente, eu tenho que decidir se devo permitir zeros à esquerda ou não, mas não existe seriamente nenhuma maneira de tornar o zero à esquerda opcional?


Bem, testei um padrão que incluía um dd.MM.uuuu zero inicial e testei um padrão que não incluía um dMuuuu zero inicial e quando analisei a entrada incorreta com as exceções de padrão incorretas.

Portanto, minha pergunta é se existe uma maneira de tornar o zero inicial opcional.

Resposta 1

Isso é trivial quando você o conhece. Uma letra padrão, por exemplo dou M, aceitará um ou dois dígitos (ou para o ano até 9 dígitos).

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d.M.u");
    System.out.println(LocalDate.parse("02.05.2019", dateFormatter));
    System.out.println(LocalDate.parse("3.5.2019", dateFormatter));
    System.out.println(LocalDate.parse("4.05.2019", dateFormatter));
    System.out.println(LocalDate.parse("06.5.2019", dateFormatter));
    System.out.println(LocalDate.parse("15.12.2019", dateFormatter));

Resultado:

2019-05-02
2019-05-03
2019-05-04
2019-05-06
2019-12-15

Procurei essas informações na documentação e não as encontrei prontamente. Não acho que esteja bem documentado.

Resposta: 2

Você pode criar um DateTimeFormatter com um formato personalizado como este

DateTimeFormatter.ofPattern("d.M.yyyy")

Em seguida, você pode analisar as datas se elas fornecerem 1 ou 2 dígitos para o dia e o mês.

String input = "02.5.2019";
LocalDate date = LocalDate.parse(input, DateTimeFormatter.ofPattern("d.M.yyyy"));

Eu usei o LocalDate aqui no novo pacote java.time, portanto, estou assumindo que sua versão do java é recente.

Resposta: 3

Como ordenar campos de bean (não métodos) pelo nome usando a idéia Intellij?

Possível duplicata: Strut2 - Obter valor da propriedade na próxima ação Estou tentando obter o seguinte usando o Struts2 response.sendRedirect ("Pay.jsp? Msg = transfer"); Isto é o que estou fazendo: <...

Estou projetando uma API repousante do WS usando o spring-mvc. Se suponha que um erro específico (digamos: MyCustomException) ocorra enquanto o servidor estiver executando o código, e eu quero retornar o error_code e ...

Quero saber como obter um identificador exclusivo do PC que meu aplicativo instalou. Segui algumas perguntas aqui, mas não consegui usá-lo. Por favor, deixe-me saber como fazê-lo em Java com ...