2014-04-14 18 views

Odpowiedz

120

Wymień

new Timestamp(); 

z

new java.util.Date() 

ponieważ nie ma domyślnego konstruktora dla Timestamp, czy można to zrobić za pomocą metody:

new Timestamp(System.currentTimeMillis()); 
+6

Nawet lepiej w Java 8: http: //docs.oracle.com/javase/tutorial/datetime/ – nimsson

97

Użyj klasy java.util.Date zamiast znacznika czasu.

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

Otrzymasz aktualną datę w podanym formacie.

+4

To pomogło mi się i zrobiłem trochę zmienił, więc nie trzeba importować 'nową Java. text.SimpleDateFormat ("dd/MM/yyyy HH: mm: ss"). format (new java.util.Date()) ' –

+0

Lepsza' nowa SimpleDateFormat ("yyyy.MM.dd HH: mm: ss"). format (nowa data()) '; – Zon

26

Można skorzystać z java.util.Date zamiast Timestamp:

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

Bardziej właściwe podejście jest określenie region Locale jako parametr w konstruktorze. Poniższy przykład wykorzystuje region Locale USA. Data formatowania locale-wrażliwy i używa Locale dostosować informacje w stosunku do zwyczajów i konwencji regionu użytkownika Locale (Java Platform SE 7)

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

Nie ma czegoś takiego jak "Strefa lokalna". Podejrzewam, że masz mylące 'Locale' i strefę czasową, które nie są ze sobą powiązane. 'Locale' steruje kulturowymi normami formatowania i ludzkim językiem używanym dla nazwy miesiąca/dnia. Strefa czasowa dostosowuje reprezentację daty i czasu do czasu w danym regionie [zegar ścienny] (https://en.wikipedia.org/wiki/Wall_clock_time). W przypadku tego pytania, Locale jest nieistotny, ponieważ nie ma problemów z formatowaniem, z którymi można by zastosować normy kulturowe, ani też nie ma nazw miesiąca/dnia, aby zlokalizować dany konkretny język ludzki. –

+0

@BasilBourque Dziękujemy za Twój wkład. Zaktualizowałem odpowiedź, by była bardziej jednoznaczna – user3144836

11

Zastosowanie java.sql tylko do przeniesienia bazy

Rodzaje java.sql, takiego jako java.sql.Timestamp, powinny być używane tylko do transferu zi do bazy danych. Natychmiast konwertuj na typy java.time w Java 8 i nowszych.

java.time.Instant

A java.sql.Timestamp mapy do java.time.Instant, moment na osi czasu w UTC.

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

Strefa czasowa

Zastosuj pożądany/Oczekiwany strefę czasową, aby uzyskać ZonedDateTime.

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

sformatowana Struny

użyć DateTimeFormatter wygenerować ciąg. Kody wzorów są podobne do tych z java.text.SimpleDateFormat, ale nie dokładnie, więc przeczytaj uważnie dokument.

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

Ten konkretny format jest niejednoznaczna co do jego dokładnego znaczenia, gdyż brak jest jakiegokolwiek wskazania offset-from-UTC lub strefy czasowej.

ISO 8601

Jeśli masz nic do powiedzenia w tej sprawie, proponuję rozważyć użycie standardowych formatów ISO 8601 zamiast toczenia własne. Standardowy format jest dość podobny do twojego. Na przykład:
2016-02-20T03:26:32+05:30.

Klasy java.time domyślnie używają tych standardowych formatów, więc nie trzeba określać wzorca. Klasa ZonedDateTime rozszerza standardowy format, dołączając nazwę strefy czasowej (mądrą poprawkę).

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

Konwersja do java.sql

można przekonwertować z java.time powrotem do java.sql.Timestamp. Wyodrębnij Instant z ZonedDateTime.

Nowe metody zostały dodane do starych klas, aby ułatwić konwersję do/z klas java.time.

java.sql.Timestamp ts = java.sql.Timestamp.from(zdt.toInstant()); 
Powiązane problemy