java.time
Abbiamo una nuova tecnologia per questo problema: il quadro java.time integrato in Java 8 e versioni successive.
La stringa di input è in formato ISO 8601 standard. Tale standard viene utilizzato di default nelle classi java.time per l'analisi/generazione di rappresentazioni testuali di valori di data e ora.
OffsetDateTime odt = OffsetDateTime.parse("2012-10-01T09:45:00.000+02:00");
La tua domanda suggerisce di voler troncare per un intero secondo.
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo(ChronoUnit.SECONDS);
Sembra che tu voglia omettere l'offset e le informazioni sul fuso orario. Il formattatore predefinito DateTimeFormatter.ISO_LOCAL_DATE_TIME
lo fa.
E a quanto pare si desidera utilizzare uno spazio nel mezzo anziché lo standard T
. È possibile definire il proprio formattatore per questo, ma vorrei semplicemente eseguire una manipolazione delle stringhe per sostituire lo T
con uno SPAZIO.
String output = odtTruncatedToWholeSecond.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T" , " ");
Semplicemente String Manipolazioni
come i commenti sulla domanda suggeriscono, a rigor di termini si può raggiungere il tuo obiettivo, lavorando solo con le stringhe e non la conversione in oggetti data-ora. Ma fornisco questa risposta presumendo che tu possa avere altre logiche di business per lavorare con questi valori di data-ora.
Chi java.time
Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi di data legacy come java.util.Date
, Calendar
, & SimpleDateFormat
.
Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione alle classi java.time.
Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.
È possibile scambiare oggetti java.time direttamente con il database. Utilizzare un codice compatibile JDBC driver con JDBC 4.2 o successivo. Nessuna necessità di stringhe, nessuna necessità di classi java.sql.*
.
Dove ottenere le classi java.time?
- Java SE 8, Java SE 9, e più tardi
- incorporato.
- Parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6 e Java SE 7
- Molte delle funzionalità java.time è di back-porting per Java 6 .
- Android
- versioni successive di implementazioni fascio Android delle classi java.time.
- Per Android precedente, il progetto ThreeTenABP si adatta a ThreeTen-Backport (menzionato sopra). Vedi How to use ThreeTenABP….
Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval
, YearWeek
, YearQuarter
e more.
Substringing è molto più veloce/più semplice di conversione a/da un oggetto data. Basta rompere l'originale in due sottostringhe (offset fissi) e quindi concatenare insieme con uno spazio vuoto tra. –
Perché è questo? Potrei analizzare fino a 100+ date in una volta sola. – Gooey
Non pensi che due operazioni di sottostringa con offset hardcoded più un paio di operazioni di concatenazione sarebbero più veloci della costruzione e dell'esecuzione di due formattatori di data? –