Hoe krijg ik de huidige tijdstempel in tekenreeksformaat in Java? “jjjj.MM.dd.UU.mm.ss”

Hoe krijg ik een tijdstempel in tekenreeksformaat in Java? “jjjj.MM.dd.UU.mm.ss”

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());

Dit is wat ik heb, maar Timestamp() vereist een parameter…


Antwoord 1, autoriteit 100%

Vervang

new Timestamp();

met

new java.util.Date()

omdat er geen standaardconstructor is voor Timestamp, of je kunt het doen met de methode:

new Timestamp(System.currentTimeMillis());

Antwoord 2, autoriteit 80%

Gebruik de klasse java.util.Datein plaats van Timestamp.

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

Hiermee krijgt u de huidige datum in het opgegeven formaat.


Antwoord 3, autoriteit 28%

tl;dr

Gebruik alleen moderne java.timeklassen. Gebruik nooit de verschrikkelijke legacy-klassen zoals SimpleDateFormat, Dateof 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" )
)                                // Returns a `String`. 

of gebruik de JVM huidige standaard tijdzone.

ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )

JAVA.TIJD & AMP; JDBC 4.2

De moderne aanpak gebruikt de java.time -klassen zoals hierboven te zien.

Als uw JDBC-stuurprogramma voldoet aan JDBC 4.2 , u kunt rechtstreeks JAVA.TIME Objecten met de database uitwisselen. Gebruik PreparedStatement::setObjecten ResultSet::getObject.

Gebruik Java.SQL alleen voor chauffeurs vóór JDBC 4.2

Als uw JDBC-stuurprogramma nog niet voldoet aan JDBC 4.2 voor ondersteuning van JAVA.TIME Typen, moet u terugvallen naar het gebruik van de Java.SQL-klassen.

Gegevens opslaan.

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;  // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;

Gegevens ophalen.

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

De Java.SQL-typen, zoals java.sql.Timestamp, mag alleen worden gebruikt voor overdracht in en uit de database. Converteer onmiddellijk naar Java.Time-typen in Java 8 en later.

java.time.Instant

a java.sql.Timestampkaarten naar een java.time.Instant, een moment op de tijdlijn in UTC. Let op de nieuwe conversiemethode toInstanttoegevoegd aan de oude klasse.

java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant(); 

Tijdzone

Pas de gewenste / verwachte tijdzone toe (ZoneId) om een ​​ZonedDateTime.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Opgemaakte strings

Gebruik een DateTimeFormatterom uw string te genereren. De patrooncodes zijn vergelijkbaar met die van java.text.SimpleDateFormatmaar niet precies, dus lees het document aandachtig door.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );

Dit specifieke formaat is dubbelzinnig wat betreft de exacte betekenis, aangezien het geen enkele indicatie heeft van offset-from-UTCof tijdzone.

ISO 8601

Als je hier iets over te zeggen hebt, raad ik je aan om standaard ISO 8601-indelingen te gebruiken in plaats van zelf te rollen. Het standaardformaat is vrij gelijkaardig aan dat van u. Bijvoorbeeld:
2016-02-20T03:26:32+05:30.

De java.time-klassen gebruiken standaard deze standaardindelingen, dus het is niet nodig om een patroon op te geven. De klasse ZonedDateTimebreidt het standaardformaat uit door de naam van de tijdzone toe te voegen (een verstandige verbetering).

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]

Converteren naar java.sql

Je kunt java.time terug converteren naar java.sql.Timestamp. Extraheer een Instantuit de ZonedDateTime.

Er zijn nieuwe methoden toegevoegd aan de oude klassen om het converteren van/naar java.time-klassen te vergemakkelijken.

java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );


Over java.time

De java.timeframework is ingebouwd in Java 8 en hoger. Deze klassen vervangen de lastige oude legacydatum-tijdklassen zoals java.util.Date, Calendar, & SimpleDateFormat.

Het Joda-Time-project, nu in onderhoudsmodus, adviseert migratie naar de java.timeklassen.

Zie voor meer informatie de Oracle-zelfstudie. En zoek Stack Overflow voor veel voorbeelden en uitleg. Specificatie is JSR 310.

U kunt java.timeobjecten rechtstreeks uitwisselen met uw database. Gebruik een JDBC-stuurprogrammadat voldoet aan JDBC 4.2of hoger. Geen strings nodig, geen java.sql.*klassen.

Waar zijn de java.time-klassen te verkrijgen?

Het ThreeTen-Extra-project breidt java.time uit met extra lessen. Dit project is een proeftuin voor mogelijke toekomstige toevoegingen aan java.time. Mogelijk vindt u hier enkele nuttige klassen, zoals Interval, YearWeek, YearQuarteren meer.


Antwoord 4, autoriteit 14%

U kunt gebruik maken van java.util.Date in plaats van Timestamp :

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

Antwoord 5, autoriteit 5%

Gebruik moderne java.timeklassen als je java 8 of nieuwer gebruikt.

String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());

Het antwoord van Basil Bourque is redelijk goed. Maar het is te lang. Veel mensen zouden geen geduld hebben om het te lezen. Top 3 antwoorden zijn te oud en kunnen Java new bee misleiden. Dus ik geef dit korte en moderne antwoord voor nieuwe ontwikkelaars. Ik hoop dat dit antwoord het gebruik van vreselijke SimpleDateFormatkan verminderen.


Antwoord 6, autoriteit 3%

Een meer geschikte benadering is om een Locale-regio op te geven als een parameter in de constructor. In het onderstaande voorbeeld wordt een Amerikaanse landinstelling gebruikt. Datumnotatie is locale-gevoelig en gebruikt de Locale om informatie af te stemmen op de gebruiken en conventies van de regio van de gebruiker Locale (Java Platform SE 7)

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());

Antwoord 7, autoriteit 2%

U kunt het volgende gebruiken:

new java.sql.Timestamp(System.currentTimeMillis()).getTime()

Resultaat:

1539594988651

Antwoord 8

Ik gebruik dit

String timeStamp = new SimpleDateFormat("dd/MM/yyyy_HH:mm:ss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp);

Other episodes