EDIT: ich hatte das "Ignorieren der Tageszeit" Teil verpasst. Es ist jetzt vorhanden, aber am Ende ...
Der einfachste Ansatz ist wahrscheinlich SimpleDateFormat
zu verwenden, entsprechend der Zeitzone eingestellt haben:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = format.parse(text);
long millis = date.getTime();
(Einstellung der Zeitzone ist die wichtige Bit hier, wie sonst wird es den Wert interpretiert in der lokalen Zeitzone zu sein.)
Alternativ, wenn Sie etwas weniger trivial als dies tun, verwenden Joda Time, die einen viel besseren Datum/Zeit-API ist. Insbesondere SimpleDateFormat
ist nicht Thread-sicher während DateTimeFormatter
ist:
// This can be reused freely across threads after construction.
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
.withLocale(Locale.US)
.withZoneUTC();
// Option 1
DateTime datetime = formatter.parseDateTime(text);
long millis = dateTime.getMillis();
// Option 2, more direct, but harder to diagnose errors
long millis = formatter.parseMillis(text);
nun so weit, haben wir die ganze ganze caboodle analysiert. Der einfachste Weg, um das Datum Teil zu ignorieren, ist es einfach abzurunden - immerhin Java nicht befolgt Schaltsekunden, also können wir es nur gestutzt:
long millisPerDay = 24L * 60L * 60L * 1000L; // Or use TimeUnit
long dayMillis = (millis/millisPerDay) * millisPerDay;
Das wird „Runde in Richtung 1970“ so, wenn Sie habe ein Datum vor 1970 wird es rund um die Ende des Tages - aber ich vermute, dass ist unwahrscheinlich, dass ein Problem sein.
Mit der Joda Zeit Version können Sie nur diese statt:
DateTime dateTime = formatter.parseDateTime(text);
long millis = dateTime.toLocalDate().getLocalMillis();
Ich persönlich würde nicht geht mit dem Gedanken, nur einen Teil nehmen. Auch wenn Sie nicht wirklich interessiert sind Erhaltung der die Stunde/Minute/Sekunde, ich denke, es ist angemessen zu analysieren, was Sie gegeben haben und dann wegwerfen Informationen. Abgesehen von allem anderen macht es Ihren Code mit schlechten Daten, z.B.
"2012-06-100"
oder
"2012-06-14 25:01:25"
zeigen Probleme in was auch immer Sie Datas liefern, und es ist gut, dass vor Ort anstatt blind fortzusetzen, nur weil die ersten 10 Zeichen in Ordnung sind.
Da nur OP das Datum will, würde ich String (0,10) es zuerst und nur das Datum analysieren. –
@PeterLawrey: Ich habe diesen Teil tatsächlich vermisst! Will edit ... –
@PeterLawrey: Ich habe gegen den Teilstring am Ende des Post argumentiert. –