Ho una data all'interno di una stringa, qualcosa come "12-dicembre-2012". Come posso convertirlo in millisecondi (lunghi)?
Ho una data all'interno di una stringa, qualcosa come "12-dicembre-2012". Come posso convertirlo in millisecondi (lunghi)?
Risposte:
Utilizzando SimpleDateFormat
String string_date = "12-December-2012";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
Date d = f.parse(string_date);
long milliseconds = d.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
È ora che qualcuno fornisca la risposta moderna a questa domanda. Nel 2012, quando è stata posta la domanda, anche le risposte pubblicate allora erano buone risposte. Perché le risposte pubblicate nel 2016 usano anche le classi allora obsolete SimpleDateFormat
ed Date
è un po 'più un mistero per me. java.time
, la moderna API di data e ora Java nota anche come JSR-310, è molto più piacevole da utilizzare. Puoi usarlo su Android tramite ThreeTenABP, vedi questa domanda: Come usare ThreeTenABP in Android Project .
Per la maggior parte degli scopi, consiglio di utilizzare i millisecondi dall'epoca all'inizio della giornata in UTC . Per ottenerli:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
String stringDate = "12-December-2012";
long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
System.out.println(millisecondsSinceEpoch);
Questo stampa:
1355270400000
Se richiedi l'ora di inizio giornata in un fuso orario specifico, specifica quel fuso orario invece di UTC, ad esempio:
.atStartOfDay(ZoneId.of("Asia/Karachi"))
Come previsto, questo dà un risultato leggermente diverso:
1355252400000
Un altro punto da notare, ricorda di fornire una localizzazione al tuo DateTimeFormatter
. Pensavo che dicembre fosse inglese, ci sono altre lingue in cui quel mese si chiama lo stesso, quindi per favore scegli tu stesso la lingua giusta. Se non hai fornito una locale, il formattatore userebbe l'impostazione della locale della JVM, che può funzionare in molti casi, e quindi un giorno inaspettatamente fallire quando esegui la tua app su un dispositivo con un'impostazione locale diversa.
java.util.Date
usando il formattatore della dataIl modo più semplice è utilizzare Date Using Date () e getTime ()
Date dte=new Date();
long milliSeconds = dte.getTime();
String strLong = Long.toString(milliSeconds);
System.out.println(milliSeconds)
usando simpledateformat puoi facilmente raggiungerlo.
1) Prima converti la stringa in java.Date usando simpledateformatter.
2) Utilizzare il metodo getTime per ottenere il conteggio dei millisec dalla data
public class test {
public static void main(String[] args) {
String currentDate = "01-March-2016";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
Date parseDate = f.parse(currentDate);
long milliseconds = parseDate.getTime();
}
}
altro Esempio clicca qui
Prova sotto il codice
SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
Date d = null;
try {
d = f.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long timeInMillis = d.getTime();