95 votes

Comment convertir une chaîne Date en millisecondes longues

J'ai une date dans une chaîne, quelque chose comme "12-Décembre-2012". Comment puis-je la convertir en millisecondes (longues) ?

164voto

Jon Lin Points 88615

Utilisation de 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();
}

17voto

Ram kiran Points 10459
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();

17voto

Ole V.V. Points 24677

Il est grand temps que quelqu'un apporte une réponse moderne à cette question. En 2012, lorsque la question a été posée, les réponses également postées à l'époque étaient de bonnes réponses. Pourquoi les réponses postées en 2016 utilisent également les classes alors dépassées depuis longtemps. SimpleDateFormat y Date est un peu plus un mystère pour moi. java.time L'API moderne de date et d'heure de Java, également connue sous le nom de JSR-310, est tellement plus agréable à utiliser. Vous pouvez l'utiliser sur Android par le biais de ThreeTenABP. cette question : Comment utiliser ThreeTenABP dans un projet Android ? .

Dans la plupart des cas, je recommande d'utiliser les millisecondes depuis l'époque du début de la journée. en UTC . Pour les obtenir :

    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);

Cette empreinte :

1355270400000

Si vous avez besoin de l'heure de début de journée dans un fuseau horaire spécifique, spécifiez ce fuseau horaire au lieu de UTC, par exemple :

            .atStartOfDay(ZoneId.of("Asia/Karachi"))

Comme prévu, cela donne un résultat légèrement différent :

1355252400000

Un autre point à noter, n'oubliez pas de fournir une locale à vos DateTimeFormatter . J'ai pris le mois de décembre pour l'anglais, il y a d'autres langues où ce mois est appelé de la même façon, alors choisissez vous-même la bonne localisation. Si vous ne fournissiez pas de paramètres régionaux, le formateur utiliserait les paramètres régionaux de la JVM, ce qui pourrait fonctionner dans de nombreux cas, mais échouerait un jour de manière inattendue si vous exécutez votre application sur un appareil dont les paramètres régionaux sont différents.

9voto

Averroes Points 1823

Jetez un coup d'œil à SimpleDateFormat qui peut analyser un String et retourner un Date et le getTime méthode de Date classe.

7voto

Dmitriy Tarasov Points 972
  • Convertissez d'abord la chaîne en java.util.Date en utilisant la date formateur
  • Utilice getTime() pour obtenir le nombre de millisecondes de la date

Prograide.com

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.

Powered by:

X