web-dev-qa-db-fra.com

Conversion de la date et de l'heure en chaîne

J'ai vu cette question posée à plusieurs reprises et aucune des réponses ne semble être ce dont j'ai besoin.

J'ai une variable de type long qui a un temps Epoch stocké en elle.

Ce que je veux faire est de le convertir en chaîne

par exemple, si le temps d’époque enregistré était celui d’aujourd’hui, la dernière chaîne serait la suivante:

17/03/2012

Comment pourrais-je cela?

20
nexus490

Regardez dans SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(new Date(myTimeAsLong));
30
Reinard

Vous créeriez une Date à partir de long - c'est facile:

Date date = new Date(epochTime);

Notez que epochTime devrait ici être en millisecondes depuis l’époque - si vous avez secondes depuis l’époque, multipliez par 1000.

Ensuite, vous créez une SimpleDateFormat spécifiant le modèle, la culture et le fuseau horaire appropriés. Par exemple:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
format.setTimeZone(...);

Puis utilisez cela pour formater la date en une chaîne:

String text = format.format(date);
22
Jon Skeet
Date date = new Date(String); 

c'est obsolète.

solution

  Date date = new Date(1406178443 * 1000L);
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
  String formatted = format.format(date);

assurez-vous de multiplier par 1000L

16
Damith Ganegoda

Joda-Time

Si, à l'époque, vous vouliez compter le nombre de millisecondes depuis le premier instant de 1970 en UTC, voici un exemple de code utilisant la bibliothèque Joda-Time…

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( yourMilliseconds, timeZone );
String output = DateTimeFormat.forStyle( "S-" ).withLocale( Locale.CANADA_FRENCH ).print( dateTime );

Autres époques

Cette définition d'Epoch est courante en raison de son utilisation sous Unix. Mais sachez qu'au moins un { couple douzaine de définitions d'époques } sont utilisés par divers systèmes informatiques.

2
Basil Bourque

essaye ça

Date date = new Date(1476126532838L);
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String formatted = format.format(date);
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));//your zone
formatted = format.format(date);
System.out.println(formatted);
1

basé sur les réponses précédentes, en passant les valeurs par défaut du système Locale et TimeZone...

String epochToIso8601(long time) {
    String format = "yyyy-MM-dd HH:mm:ss";
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
    sdf.setTimeZone(TimeZone.getDefault());
    return sdf.format(new Date(time * 1000));
}
0
Martin Zeitler

Il est temps que quelqu'un fournisse la réponse moderne (valide et recommandé depuis 2014).

Java.time

    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedDateTime(FormatStyle.LONG).withLocale(Locale.US);

    String facebookTime = "1548410106047";
    long fbt = Long.parseLong(facebookTime);
    ZonedDateTime dateTime = Instant.ofEpochMilli(fbt).atZone(ZoneId.of("America/Indiana/Knox"));
    System.out.println(dateTime.format(formatter));

La sortie est:

25 janvier 2019 à 03:55:06 CST

Si vous ne vouliez que la date et dans un format plus court, utilisez par exemple

    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.US);

1/25/19

Notez que l'extrait de code vous permet de spécifier le fuseau horaire, la langue (paramètres régionaux) et la longueur du format souhaité.

Liens

0
Ole V.V.

Vous devez savoir que l’époque en Java est exprimée en millisecondes, alors que ce que vous convertissez peut l’être en secondes. Assurez-vous que les deux côtés des conversions sont en millisecondes, puis vous pourrez extraire les paramètres de date à partir de l'objet Date.

0
Ajibola

Essaye ça...

exemple d'horodatage d'époque: 1414492391238

Méthode:

public static String GetHumanReadableDate(long epochSec, String dateFormatStr) {
    Date date = new Date(epochSec * 1000);
    SimpleDateFormat format = new SimpleDateFormat(dateFormatStr,
            Locale.getDefault());
    return format.format(date);
}

Ergonomie:

long timestamp = Long.parseLong(engTime) / 1000;
String engTime_ = GetHumanReadableDate(timestamp, "dd-MM-yyyy HH:mm:ss aa");

Résultat:

28-10-2014 16:03:11 pm

Bonne codage

0