Eu quero converter um java.util.Date
objeto para um String
em Java.
O formato é 2010-05-30 22:15:52
java
date
formatting
java.util.date
novicePrgrmr
fonte
fonte
Date
em 2019. Essa classe é mal projetada e desatualizada há muito tempo. Em vez disso, useInstant
ou outra classe de java.time, a moderna API de data e hora de Java .Respostas:
Converta uma Data em uma String usando o
DateFormat#format
método:Em http://www.kodejava.org/examples/86.html
fonte
Calendar
vez de simplesnew Date()
? Existe diferença?MM/dd/yyyy
formato é estúpido e quebrado. Não use isso. Sempre usedd/MM/yyyy
ouyyyy-MM-dd
.yyyy-MM-dd
qualquer lugar, mas o que você pode fazer?).fonte
O Commons-lang DateFormatUtils está cheio de guloseimas (se você tiver commons-lang em seu caminho de classe)
fonte
null
verificação adicional .tl; dr
java.time
A maneira moderna é com as classes java.time que agora substituem as antigas classes problemáticas de data e hora herdadas.
Primeiro converta seu
java.util.Date
para umInstant
. AInstant
classe representa um momento na linha do tempo no UTC com uma resolução de nanossegundos (até nove (9) dígitos de uma fração decimal).Conversões de / para java.time são executadas por novos métodos adicionados às classes antigas.
Tanto o seu
java.util.Date
como ojava.time.Instant
estão no UTC . Se você deseja ver a data e a hora como UTC, que assim seja. ChametoString
para gerar uma String no formato ISO 8601 padrão.Para outros formatos, você precisa transformar o seu
Instant
em mais flexívelOffsetDateTime
.Veja esse código executado ao vivo em IdeOne.com .
Para obter uma String no formato desejado, especifique a
DateTimeFormatter
. Você pode especificar um formato personalizado. Mas eu usaria um dos formatadores predefinidos (ISO_LOCAL_DATE_TIME
) e substituiria oT
resultado em um SPACE.A propósito, eu não recomendo esse tipo de formato em que você propositadamente perde as informações de deslocamento do UTC ou do fuso horário. Cria ambiguidade quanto ao significado do valor de data e hora dessa sequência.
Também tenha cuidado com a perda de dados, pois qualquer segundo fracionário está sendo ignorado (efetivamente truncado) na representação da String do valor de data e hora.
Para ver o mesmo momento pelas lentes do relógio de parede de uma determinada região , aplique a
ZoneId
para obter aZonedDateTime
.Para gerar uma String formatada, faça o mesmo que acima, mas substitua
odt
porzdt
.Se você executar esse código várias vezes, convém ser um pouco mais eficiente e evitar a chamada para
String::replace
. Interromper essa chamada também reduz seu código. Se desejar, especifique seu próprio padrão de formatação em seu próprioDateTimeFormatter
objeto. Coloque em cache esta instância como uma constante ou membro para reutilização.Aplique esse formatador passando a instância.
Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar as classes de data e hora velhos complicados, como
java.util.Date
,.Calendar
, ejava.text.SimpleDateFormat
.O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para java.time.
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações.
Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport e adaptada ainda mais ao Android no ThreeTenABP (consulte Como usar ... ).
O projeto ThreeTen-Extra estende o java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time.
fonte
Z
é usado em vez de+00:00
por padrão. Corrigi a resposta, obrigado. Para sua informação, significam a mesma coisaZ
:, pronunciado “Zulu” significa um deslocamento de zero horas-minutos-segundos, o mesmo que+00:00
. O padrão ISO 8601 suporta os dois estilos.atOffset
método deInstant
classe em Java 8. Ver Javadoc:Instant::atOffset
. No Java 8, uma chamada comoInstant.now().atOffset( ZoneOffset.UTC ).toString()
será executada. Verifique suasimport
declarações. Verifique se o seu IDE / projeto está definido para executar o Java 8 ou posterior, em vez de uma versão anterior do Java. Veja o código executado ao vivo em IdeOne.com: ideone.com/2Vm2O5One-liners alternativos em java simples:
Este usa Formatter e relativa indexação em vez de
SimpleDateFormat
que é não thread-safe , btw.Um pouco mais repetitivo, mas precisa de apenas uma declaração. Isso pode ser útil em alguns casos.
fonte
Por que você não usa o Joda (org.joda.time.DateTime)? É basicamente uma linha.
fonte
DateTime
objeto.new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
Parece que você está procurando por SimpleDateFormat .
Formato: aaaa-MM-dd kk: mm: ss
fonte
HH
(0-23) é mais comum.Em um único tiro;)
Para obter a data
Para obter o tempo
Para obter a data e hora
Feliz codificação :)
fonte
java.util.Date
,java.util.Calendar
ejava.text.SimpleDateFormat
estão agora legado , suplantado pelos java.time classes internas em Java 8 & Java 9. Consulte Tutorial pela Oracle .fonte
A maneira mais fácil de usá-lo é a seguinte:
onde "aaaa-MM-dd'T'HH: mm: ss" é o formato da data de leitura
saída: dom 14 abr 16:11:48 EEST 2013
Notas: HH vs hh - HH refere-se ao formato de 24h - hh refere-se ao formato de 12h
fonte
Se você precisar apenas da hora a partir da data, poderá usar o recurso String.
Isso cortará automaticamente a parte do tempo da String e a salvará dentro da
timeString
.fonte
Aqui estão exemplos de uso da nova API Java 8 Time para formatar legado
java.util.Date
:É bom
DateTimeFormatter
que ele possa ser armazenado em cache de maneira eficiente, pois é seguro para threads (ao contrárioSimpleDateFormat
).Lista de adaptadores predefinidos e referência de notação de padrão .
Créditos:
Como analisar / formatar datas com LocalDateTime? (Java 8)
Java8 conversão java.util.Date para java.time.ZonedDateTime
Formatar Instantâneo para String
Qual é a diferença entre jon 8 ZonedDateTime e OffsetDateTime?
fonte
Tente isso,
Resultado:
Para mais informações sobre a formatação de data e hora em java, consulte os links abaixo
Centro de Ajuda da Oracle
Exemplo de data e hora em java
fonte
fonte
Vamos tentar isso
Ou uma função utilitária
De converter data em string em Java
fonte
fonte
fonte
Opção de uma linha
Esta opção recebe uma linha fácil para escrever a data real.
fonte
java.util.Date
,java.util.Calendar
, ejava.text.SimpleDateFormat
são agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da Oracle .2019-20-23 09:20:22
- mês 20 ??) (2) Não vejo que a resposta fornece algo que ainda não foi abordado em outras respostas. (3) Por favor, não ensine os jovens a usar aSimpleDateFormat
aula desatualizada e notoriamente problemática . Pelo menos não como a primeira opção. E não sem nenhuma reserva. Hoje temos muito melhor najava.time
moderna API de data e hora de Java, e suasDateTimeFormatter
.