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...

Author: riccardo.cardin, 2014-04-14

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());
 145
Author: Jigar Joshi, 2014-11-25 15:57:25

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.

 113
Author: dimoniy, 2014-04-14 19:34:47

Podes fazer uso de java.util.Data em vez de data:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
 25
Author: Kakarot, 2014-04-14 19:36:09

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 como java.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.

O java.classes de tempo usam esses formatos padrão por padrão, então não há necessidade de especificar um padrão. A classe 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() );
 12
Author: Basil Bourque, 2018-09-11 17:19:59

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());
 6
Author: user3144836, 2016-02-23 02:00:40