Existe uma formatação de estilo php date () equivalente em Java? Quer dizer, em php eu posso usar a barra invertida para escapar de caracteres para que sejam tratados literalmente. Ou seja, yyyy \ y \ e \ a \ r se tornaria o ano de 2010 . Não encontrei nada semelhante em Java, todos os exemplos tratam apenas de formatos de data integrados.
Em particular, lido com selecionadores de data JCalendar e sua propriedade dateFormatString .
Eu preciso disso porque em minha localidade é necessário escrever todos os tipos de coisas adicionais em formato de data, como d. (para o dia) após a parte dos dias, m. (por anos) depois de anos parte e assim por diante. Na pior das hipóteses, eu poderia usar substituição de string ou regexp, mas talvez haja uma maneira mais simples? Desde já, obrigado!
fonte
SimpleDateFormat
classe usada em algumas das respostas é notoriamente problemática e há muito desatualizada. Evite isso. Em vez disso, use a resposta curta de Mark Jeronimus, demonstrando o uso de java.time, a moderna API Java de data e hora .Respostas:
Claro, com SimpleDateFormat você pode incluir strings literais:
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
fonte
46''
. O primeiro a escapar do segundo.java.util.Date
,java.util.Calendar
ejava.text.SimpleDateFormat
agora são legadas , suplantadas pelas classes java.time construídas no Java 8 e posterior.Apenas para completar, o Java 8
DateTimeFormatter
também oferece suporte para:DateTimeFormatter.ofPattern("yyyy 'year'");
fonte
Você pode usar String.format conforme documentado em java.util.Formatter :
Calendar c = ...; String s = String.format("%tY year", c); // -> s == "2010 year" or whatever the year actually is
fonte
java.time
Mark Jeronimus já disse isso . Estou desenvolvendo um pouco mais. Basta colocar o texto a ser impresso literalmente entre aspas simples.
DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'"); System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter)); System.out.println(Year.of(2010).format(yearFormatter)); System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));
Resultado ao executar agora:
Se você estiver usando a
DateTimeFormatterBuilder
e seuappendPattern
método, use aspas simples da mesma maneira. Ou use seuappendLiteral
método, sem aspas simples.Como colocamos aspas simples no formato, então? Duas aspas simples produzem uma. Não importa se as aspas simples duplas estão entre aspas simples ou não:
DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\""); System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));
DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH); System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles")) .format(formatterWithSingleQuoteInsideSingleQuotes));
Todos os formatadores acima também podem ser usados para análise. Por exemplo:
LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote); System.out.println(time);
A
SimpleDateFormat
classe usada quando essa pergunta foi feita há quase 10 anos é notoriamente problemática e há muito desatualizada. Eu recomendo que você use java.time, a API moderna de data e hora do Java. É por isso que demonstro exatamente isso.Links
DateTimeFormatter
fonte
java.text.SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = formatter.format(date);
Você obterá mais informações aqui texto do link
fonte