web-dev-qa-db-fra.com

Comment convertir une chaîne Date en longues millisecondes

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

77
Dawood Abbasi

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();
}
134
Jon Lin
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
15
Ram kiran

Jetez un coup d'œil à SimpleDateFormat class qui peut analyser un String et renvoyer un Date et la méthode getTime de Date class.

9
Averroes
  • Convertissez d'abord la chaîne en Java.util.Date avec la date formateur
  • Utilisez getTime () pour obtenir le nombre de millisecs à partir de la date
7
Dmitriy Tarasov

Il est temps que quelqu'un fournisse la réponse moderne à cette question. En 2012, lorsque la question a été posée, les réponses également affichées à l'époque étaient de bonnes réponses. Pourquoi les réponses postées en 2016 utilisent également les classes alors obsolètes SimpleDateFormat et Date est un peu plus un mystère pour moi. Java.time, l'API Java date et heure moderne, également appelé JSR-310, est beaucoup plus agréable à utiliser. Vous pouvez l'utiliser sur Android via ThreeTenABP, voir cette question: Comment utiliser ThreeTenABP dans Android Project .

Dans la plupart des cas, je vous recommande d’utiliser les millisecondes depuis l’époque au 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);

Cela imprime:

1355270400000

Si vous avez besoin de l'heure au début de la journée dans un fuseau horaire spécifique, spécifiez ce fuseau au lieu de l'heure 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, pensez à fournir des paramètres régionaux à votre DateTimeFormatter. En décembre, j’ai pris l’anglais. Il existe d’autres langues où ce mois-ci s’appelle le même. Veuillez donc choisir vous-même les paramètres régionaux. Si vous ne fournissez pas de paramètres régionaux, le formateur utilise le paramètre de paramètres régionaux de la machine virtuelle Java, qui peut fonctionner dans de nombreux cas, puis échoue de manière inattendue un jour lorsque vous exécutez votre application sur un périphérique avec un paramètre de paramètres régionaux différent.

7
Ole V.V.

vous pouvez utiliser la méthode simpleDateFormat pour analyser la date de la chaîne.

3
XepterX

en utilisant simpledateformat, vous pouvez facilement y parvenir.

1) Convertissez d’abord la chaîne en Java.Date en utilisant simpledateformatter.

2) Utilisez la méthode getTime pour obtenir le nombre de millisecondes à partir de la date.

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

plus Exemple cliquez ici

0
Ankit jain