J'ai une chaîne de caractères avec un format de date tel que
Jun 13 2003 23:11:52.454 UTC
contenant des millisec... que je veux convertir en époque. Existe-t-il un utilitaire en Java que je peux utiliser pour faire cette conversion ?
J'ai une chaîne de caractères avec un format de date tel que
Jun 13 2003 23:11:52.454 UTC
contenant des millisec... que je veux convertir en époque. Existe-t-il un utilitaire en Java que je peux utiliser pour faire cette conversion ?
Ce code montre comment utiliser un java.text.SimpleDateFormat pour analyser une java.util.Date à partir d'une chaîne de caractères :
String str = "Jun 13 2003 23:11:52.454 UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz");
Date date = df.parse(str);
long epoch = date.getTime();
System.out.println(epoch); // 1055545912454
Date.getTime()
renvoie le temps de l'époque en millisecondes.
Vous pouvez également utiliser la nouvelle API Java 8
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class StackoverflowTest{
public static void main(String args[]){
String strDate = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss.SSS zzz");
ZonedDateTime zdt = ZonedDateTime.parse(strDate,dtf);
System.out.println(zdt.toInstant().toEpochMilli()); // 1055545912454
}
}
El DateTimeFormatter
remplace l'ancienne classe SimpleDateFormat
. Vous pouvez alors créer un ZonedDateTime
à partir duquel vous pouvez extraire le temps d'époque souhaité.
Le principal avantage est que vous êtes désormais protégé par des fils.
Merci à Basil Bourque pour ses remarques et suggestions. Lisez sa réponse pour plus de détails.
ZonedDateTime.parse(
"Jun 13 2003 23:11:52.454 UTC" ,
DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" )
)
.toInstant()
.toEpochMilli()
1055545912454
Cette réponse développe le Réponse de Lockni .
DateTimeFormatter
Définissez tout d'abord un modèle de formatage correspondant à votre chaîne de caractères d'entrée en créant un fichier DateTimeFormatter
objet.
String input = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" );
ZonedDateTime
Analyser la chaîne de caractères comme un ZonedDateTime
. Vous pouvez penser à cette classe comme : ( Instant
+ ZoneId
).
ZonedDateTime zdt = ZonedDateTime.parse ( "Jun 13 2003 23:11:52.454 UTC" , f );
zdt.toString(): 2003-06-13T23:11:52.454Z[UTC]
Je ne recommande pas de suivre les valeurs de date-heure comme un compte à rebours. époque . Cela rend le débogage délicat, car les humains ne peuvent pas discerner une date et une heure significatives à partir d'un nombre, et des valeurs invalides ou inattendues peuvent donc passer inaperçues. De plus, ces comptages sont ambigus, tant au niveau de la granularité (secondes entières, milli, micro, nano, etc.) que de l'époque (au moins deux douzaines selon les différents systèmes informatiques).
Mais si vous insistez, vous pouvez obtenir un compte de millisecondes à partir de l'époque du premier moment de 1970 en UTC ( 1970-01-01T00:00:00
) par l'intermédiaire du Instant
classe. Sachez que cela entraîne une perte de données car vous tronquez toutes les nanosecondes en millisecondes.
Instant instant = zdt.toInstant ();
instant.toString(): 2003-06-13T23:11:52.454Z
long millisSinceEpoch = instant.toEpochMilli() ;
1055545912454
El java.time est intégré à Java 8 et aux versions ultérieures. Ces classes remplacent les anciennes classes héritage les classes de date et d'heure telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez sur Stack Overflow de nombreux exemples et explications. La spécification est JSR 310 .
El Joda-Time Le projet, actuellement en mode de maintenance conseille la migration vers le java.time classes.
Vous pouvez échanger java.time directement avec votre base de données. Utilisez un Pilote JDBC conforme à JDBC 4.2 ou plus tard. Pas besoin de ficelles, pas besoin de java.sql.*
classes. Support de Hibernate 5 et JPA 2.2 java.time .
Où obtenir les classes java.time ?
Créer une méthode commune pour convertir une chaîne en format date
public static void main(String[] args) throws Exception {
long test = ConvertStringToDate("May 26 10:41:23", "MMM dd hh:mm:ss");
long test2 = ConvertStringToDate("Tue, Jun 06 2017, 12:30 AM", "EEE, MMM dd yyyy, hh:mm a");
long test3 = ConvertStringToDate("Jun 13 2003 23:11:52.454 UTC", "MMM dd yyyy HH:mm:ss.SSS zzz");
}
private static long ConvertStringToDate(String dateString, String format) {
try {
return new SimpleDateFormat(format).parse(dateString).getTime();
} catch (ParseException e) {}
return 0;
}
String dateTime="15-3-2019 09:50 AM" //time should be two digit like 08,09,10
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy hh:mm a");
LocalDateTime zdt = LocalDateTime.parse(dateTime,dtf);
LocalDateTime now = LocalDateTime.now();
ZoneId zone = ZoneId.of("Asia/Kolkata");
ZoneOffset zoneOffSet = zone.getRules().getOffset(now);
long a= zdt.toInstant(zoneOffSet).toEpochMilli();
Log.d("time","---"+a);
vous pouvez obtenir l'identifiant de la zone à partir de ce qui suit un lien !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.