Prevod medzi reťazcom a časovou značkou
1. Prehľad
Časová značka je jedným z mála starších objektov dátumu a času v Jave.
V tomto návode uvidíme, ako analyzovať z a String hodnota do a Časová značka objekt a ako formátovať a Časová značka namietať voči a String.
A keďže Časová značka spolieha sa na proprietárny formát Java, uvidíme, ako sa efektívne adaptovať.
2. Analyzovať a String do a Časová značka
2.1. Štandardný formát
Najjednoduchší spôsob analýzy a String do a Časová značka je jeho hodnota metóda:
Timestamp.valueOf ("2018-11-12 01: 02: 03.123456789")
A keď náš String je vo formáte časovej pečiatky JDBC - rrrr-m [m] -d [d] hh: mm:ss[.f ...] - potom je to celkom jednoduché.
Tento vzor môžeme interpretovať takto:
Vzor | Popis | Príklad |
---|---|---|
rrrr | Predstavuje rok a je povinné mať preň štyri číslice. | 2018 |
m [m] | Pre zložku mesiac musíme mať jednu alebo dve číslice (od 1 do 12). | 1, 11 |
d [d] | Pre hodnotu dňa v mesiaci musíme mať jednu alebo dve číslice (od 1 do 31). | 7, 12 |
hh | Stojí za hodinu dňa s povolenými hodnotami od 0 do 23. | 01, 16 |
mm | Stojí minúty v hodine s povolenými hodnotami od 0 do 59. | 02, 45 |
ss | Stojí sekundy v minúte s povolenými hodnotami od 0 do 59. | 03, 52 |
[.f ...] | Predstavuje voliteľné zlomky sekundy, môže byť s presnosťou až na nanosekundy, takže povolené hodnoty sú od 0 do 999999999. | 12, 1567, 123456789 |
2.2. Alternatívne formáty
Ak teraz nie je vo formáte časovej pečiatky JDBC, potom našťastie hodnota tiež berie a LocalDateTime inštancia.
To znamená, že môžeme mať dátum v akomkoľvek formáte, musíme ho najskôr previesť na a LocalDateTime:
Reťazcový vzor = "MMM dd, rrrr HH: mm: ss.SSSSSSSS"; String timestampAsString = "12. novembra 2018 13: 02: 56.12345678"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern (vzor); LocalDateTime localDateTime = LocalDateTime.from (formatter.parse (timestampAsString));
A potom môžeme použiť hodnota robili sme predtým:
Timestamp timestamp = Timestamp.valueOf (localDateTime); assertEquals ("2018-11-12 13: 02: 56.12345678", timestamp.toString ());
Všimnite si mimochodom, na rozdiel od a Dátum objekt, a Časová značka objekt je schopný uložiť zlomky sekundy.
3. Formátujte a Časová značka ako String
Na formátovanie a Časová značka, budeme mať rovnakú výzvu, pretože jej predvoleným formátom je vlastný formát časovej pečiatky JDBC:
assertEquals ("2018-11-12 13: 02: 56.12345678", timestamp.toString ());
Ale opäť pomocou sprostredkujúcej konverzie môžeme výsledný formátovať String na iný vzor dátumu a času, ako je norma ISO-8601:
Timestamp timestamp = Timestamp.valueOf ("2018-12-12 01: 02: 03.123456789"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; Reťazec timestampAsString = formatter.format (timestamp.toLocalDateTime ()); assertEquals ("2018-12-12T01: 02: 03.123456789", timestampAsString);
4. Záver
V tomto článku sme videli, ako prevádzať medzi String a Časová značka objekty v Jave. Tiež sme videli, ako sa používa LocalDateTime prevod ako sprostredkovateľský krok na prevod do a z rôznych vzorov dátumu a času.
A nezabudnite všetky tieto príklady a úryvky nájsť na GitHub.