J'ai des secondes depuis le 1er janvier 1970 UTC (Epoch time).
1320105600
J'ai besoin de convertir ces secondes en date et heure dans le format ci-dessous.
Vendredi 4 novembre 2011 5 h 00
Comment puis-je atteindre cet objectif?
Si vous êtes limité aux anciennes API Java.util.Date
Et Java.util.Calendar
, Vous devez tenir compte du fait que les horodatages sont interprétés en millisecondes, et non en secondes. Vous devez donc d'abord le multiplier par 1000 pour obtenir l'horodatage en millisecondes.
long seconds = 1320105600;
long millis = seconds * 1000;
De cette façon, vous pouvez le fournir à a.o. le constructeur de Java.util.Date
et enfin utiliser SimpleDateFormat
pour convertir un Java.util.Date
en Java.lang.String
dans le modèle de format de date souhaité, si nécessaire avec un fuseau horaire prédéfini (sinon il utiliserait le système fuseau horaire par défaut , qui n'est pas GMT/UTC en soi et donc l'heure formatée peut être désactivée).
Date date = new Date(millis);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM
Dans le cas où vous êtes déjà sur Java8, il y a un LocalDateTime#ofEpochSecond()
qui vous permet de nourrir Epoch secondes directement sans avoir besoin de multiplier en millisecondes.
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
String formattedDate = dateTime.format(formatter);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM
long yourSeconds = 1320105600L;
Date d = new Date(yourSeconds * 1000);
Voir ceci javadoc pour plus d'informations. Le constructeur a besoin de millisecondes.
Pour afficher cette date dans un format approprié, vous devez cocher DateFormat
Voici un exemple:
DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz");
System.out.println(df.format(date));
Le Answer by BalusC est bon en ce qu'il vous indique l'utilisation de Java.time. Mais cette réponse utilise LocalDateTime
où Instant
est plus approprié. Un LocalDateTime
n'est pas un moment sur la chronologie car il n'a délibérément aucun concept de offset-from-UTC ou fuseau horaire .
Le framework Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date-heure gênantes telles que Java.util.Date
, .Calendar
, & Java.text.SimpleDateFormat
. L'équipe Joda-Time conseille également la migration vers Java.time.
Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications.
Une grande partie de la fonctionnalité Java.time est back-portée vers Java 6 & 7 in ThreeTen-Backport et encore adaptée à Android dans ThreeTenABP .
Instant
Un moment sur la timeline dans UTC avec une résolution jusqu'à nanosecondes est représenté par le Instant
classe.
Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );
Dump sur console. Votre valeur d'entrée est le premier moment du 1er novembre 2011 dans UTC . Le Z
à la fin, abréviation de 'Zulu', signifie UTC.
System.out.println ( "instant: " + instant );
instant: 2011-11-01T00: 00: 00Z
ZonedDateTime
Dans vos commentaires, vous mentionnez vouloir voir cette date-heure à travers l'objectif de la America/Chicago
fuseau horaire. Utilisez un nom de fuseau horaire correct . Appliquez un fuseau horaire, ZoneId
, pour obtenir un objet ZonedDateTime
. On voit que Chicago a cinq heures de retard sur UTC à cette date.
ZoneId zoneId = ZoneId.of ( "America/Chicago" );
ZonedDateTime zdt = instant.atZone ( zoneId );
zdt: 2011-10-31T19: 00-05: 00 [Amérique/Chicago]
Les chaînes vues ci-dessus sont au format standard ISO 8601 . Pour générer des chaînes dans d'autres formats, utilisez la classe DateTimeFormatter
. Vous pouvez spécifier votre propre modèle personnalisé. Mais il est généralement préférable de laisser Java.time se localiser automatiquement au langage humain et aux normes culturelles encodées dans un objet Locale
.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatter = formatter.withLocale ( Locale.US );
String output = zdt.format ( formatter );
Lundi 31 octobre 2011 7:00:00 PM CDT
Pour spécifier votre propre format personnalisé, recherchez Stack Overflow pour de nombreux exemples et plus de discussion.
int seconds = 1320105600;
Date date = new Date(seconds * 1000);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a");
System.out.println(sdf.format(date));
L'astuce consiste à utiliser Java.util.Date
et Java.text.DateFormat
pour obtenir le format souhaité. Vous pouvez voir comment le faire dans tutoriels sur le Web .