J'ai une date dans une chaîne, quelque chose comme "12-décembre-2012". Comment puis-je convertir cela en millisecondes (longues)?
J'ai une date dans une chaîne, quelque chose comme "12-décembre-2012". Comment puis-je convertir cela en millisecondes (longues)?
Réponses:
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();
}
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
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 publiées à l'époque étaient également de bonnes réponses. Pourquoi les réponses publiées en 2016 utilisent également les classes alors obsolètes SimpleDateFormat
et Date
sont un peu plus un mystère pour moi. java.time
, l'API de date et d'heure Java moderne également connue sous le nom de JSR-310, est tellement plus agréable à utiliser. Vous pouvez l'utiliser sur Android via le ThreeTenABP, voir cette question: Comment utiliser ThreeTenABP dans Android Project .
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);
Cela imprime:
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 à votre DateTimeFormatter
. J'ai pris décembre pour anglais, il y a d'autres langues où ce mois s'appelle le même, alors veuillez choisir vous-même le lieu approprié. 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 appareil avec un paramètre de paramètres régionaux différent.
java.util.Date
utilisant le formateur de dateLe moyen le plus simple est d'utiliser la date en utilisant la date () et getTime ()
Date dte=new Date();
long milliSeconds = dte.getTime();
String strLong = Long.toString(milliSeconds);
System.out.println(milliSeconds)
en utilisant simpledateformat, vous pouvez facilement y parvenir.
1) Commencez par convertir 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
Essayez ci-dessous le code
SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
Date d = null;
try {
d = f.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long timeInMillis = d.getTime();