Como obter a data actual no formato string em Java? "AAAA. MM. dd. HH. mm. ss"
Como obter o timestamp no formato string em Java? "AAAA. MM. dd. HH. mm. ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
isto é o que eu tenho, mas o Timestamp() requer um parâmetro...
5 answers
Substituir
new Timestamp();
Com
new java.util.Date()
Porque não existe um construtor predefinido para Timestamp
, ou pode fazê-lo com o método:
new Timestamp(System.currentTimeMillis());
Utilizar java.util.Date
A classe em vez da hora.
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
Isto dar-lhe-á a data actual no formato indicado.
Podes fazer uso de java.util.Data em vez de data:
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
Tl; dr
Utilize apenas java moderno .horas das aulas. Nunca use as terríveis classes legadas, como SimpleDateFormat
, Date
, ou java.sql.Timestamp
.
ZonedDateTime // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now( // Capture the current moment.
ZoneId.of( "Africa/Tunis" ) // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST.
) // Returns a `ZonedDateTime` object.
.format( // Generate a `String` object containing text representing the value of our date-time object.
DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)
Usa java.sql apenas para transferência de bases de Dados
O java.tipos de sql, tais comojava.sql.Timestamp
, só deve ser utilizado para transferência dentro e fora da base de dados. Converter imediatamente para java.tipos de tempo em Java 8 e mais tarde.
java.time.Instant
A java.sql.Timestamp
mapeia para a java.time.Instant
, um momento na linha do Tempo em UTC.
java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant();
Fuso Horário
Aplicar o fuso horário desejado / esperado para obter um ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Cordas Formatadas
Utilizar a DateTimeFormatter
para gerar o seu texto. Os códigos de padrão são semelhantes aos de:java.text.SimpleDateFormat
mas não exactamente, por isso leia o médico com atenção.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );
Este formato em particular é ambíguo quanto ao seu significado exacto, uma vez que não tem qualquer indicação de offset-from-UTC ou Fuso horário.
ISO 8601
Se TEM alguma palavra a dizer sobre o assunto, sugiro que considere a utilização dos formatos ISO 8601 em vez de Os gravar. O formato padrão é bastante semelhante ao seu. Por exemplo:2016-02-20T03:26:32+05:30
.
ZonedDateTime
estende o formato padrão, adicionando o nome do fuso horário (uma melhoria sábia).
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Converter para java.SQL
Podes converter de java.tempo de volta a java.sql.Timestamp
. Extrair um Instant
do ZonedDateTime
.
Novos métodos foram adicionados às classes antigas para facilitar a conversão de / para java.aulas de tempo.
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
Uma abordagem mais apropriada é especificar uma região local como parâmetro no construtor. O exemplo abaixo usa uma região local dos EUA. A formatação de datas é locale-sensitive e usa a Locale para adaptar a informação relativa aos costumes e convenções da região do utilizador Locale (plataforma Java SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());