Cum să obțineți timestamp în șir format în Java? "aaaa.MM.dd.HH.mm.ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
Aceasta este ceea ce am, dar Timestamp() necesită o parametrii...
Înlocuiți
new Timestamp();
cu
new java.util.Date()
pentru că nu există nici un constructor implicit pentru Timestamp
, sau o poti face cu metoda:
new Timestamp(System.currentTimeMillis());
Utilizați numai modern java.timp de ore. Nu utilizați niciodată moștenirea teribilă clase, cum ar fi `SimpleDateFormat", "Data", sau " 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`.
Abordarea modernă utilizează java.timp clase cum am văzut mai sus. Dacă JDBC driver este în conformitate cu JDBC 4.2, puteți face schimb direct java.timp obiecte cu baza de date. Folosim PreparedStatement::setObject " și " ResultSet::getObject`.
Dacă JDBC driver încă nu se conformează cu JDBC 4.2 de sprijinire a java.timp tipuri, trebuie să cadă înapoi la folosind java.sql clase.
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ; // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Java.sql tipuri, cum ar fi java.sql.Timestamp
, ar trebui să fie folosite numai pentru transferul în și din baza de date. Converti imediat la java.tipuri de timp în Java 8 și mai târziu.
O java.sql."Timestamp" hărți pentru a o
java.timp.Instant`, un moment pe cronologie în UTC.
java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant();
Aplica dorit/așteptat fusul orar pentru a obține o ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Utilizați un DateTimeFormatter
pentru a genera un șir de caractere. Modelul coduri sunt similare cu cele ale java.text.SimpleDateFormat
, dar nu exact, așa că citiți doc cu atenție.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );
Acest format special este ambiguă cu privire la sensul său exact ca ea nu are nici o indicație de offset-de-UTC sau de fus orar.
Dacă aveți ceva de spus în această chestiune, vă sugerez să luați în considerare utilizarea standard ISO 8601 formate mai degrabă decât materialul propriu. Formatul standard este destul de asemanatoare cu a ta. De exemplu:2016-02-20T03:26:32+05:30
.
Java.timpul clase folosesc aceste formate standard, în mod implicit, astfel încât nu este nevoie pentru a specifica un model. Anii `ZonedDateTime clasa extinde formatul standard prin adăugarea la numele de zona de timp (un înțelept îmbunătățire).
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Puteți converti de la java.timp înapoi la java.sql."Timestamp". Extractul o Instant "de la" ZonedDateTime
.
Metode noi au fost adăugate la vechile clase pentru a facilita conversia la/de la java.timpul clase.
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
De java.timp cadrul este construit în Java 8 și mai târziu. Aceste clase înlocui supărătoare vechi legacy data de clase, cum ar fi java.util.Data
, Calendar
, & SimpleDateFormat
.
De Joda-Time, proiect, acum în modul de întreținere, sfătuiește migrației la java.time clase.
Pentru a afla mai multe, consultați Oracle Tutorial. Și de căutare Stack Overflow pentru mai multe exemple și explicații. Caietul de sarcini este JSR 310.
Posibil schimb java.timp obiecte direct cu baza dumneavoastră de date. Utilizați un JDBC driver compatibil cu JDBC 4.2 sau mai târziu. Nu este nevoie pentru siruri de caractere, nu este nevoie de java.sql.*` clase.
În cazul în care pentru a obține java.timpul clase?
Interval
, YearWeek
, YearQuarter
, și mai mult. O abordare mai adecvată este de a specifica o locație regiune ca un parametru în constructor. Exemplul de mai jos foloseste un NE Localizare regiune. Data formatarea locale sensibile si foloseste Locale de a adapta informațiile referitoare la obiceiurile și convențiile de utilizator's regiunea Locale (Platforma Java SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());
Utilizarea modernă a java.timpul clase dacă utilizați java 8 sau mai nou.
String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
Vasile Bourque's de răspuns este destul de bun. Dar's de prea mult timp. Mulți oameni nu ar avea nici răbdare să-l citească. Primele 3 răspunsuri sunt prea vechi și poate induce în eroare Java noi de albine .Deci, am oferi acest scurt și moderne răspuns pentru noi vine devs. Sper că acest răspuns poate reduce utilizarea de teribil SimpleDateFormat
.