Android 将日期和时间转换为毫秒

2023-12-22

我有一种日期和时间格式,如下所示:

Tue Apr 23 16:08:28 GMT+05:30 2013

我想转换成毫秒,但实际上我不知道它是什么格式。有人可以帮助我吗?


更新为日期时间格式化程序 https://developer.android.com/reference/java/time/format/DateTimeFormatter?hl=enAPI 26 中引入。

对于 API 26 及以上版本,代码可以编写如下

// Below Imports are required for this code snippet
// import java.util.Locale;
// import java.time.LocalDateTime;
// import java.time.ZoneOffset;
// import java.time.format.DateTimeFormatter;
String date = "Tue Apr 23 16:08:28 GMT+05:30 2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
LocalDateTime localDate = LocalDateTime.parse(date, formatter);
long timeInMilliseconds = localDate.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
Log.d(TAG, "Date in milli :: FOR API >= 26 >>> " + timeInMilliseconds);
// Output is -> Date in milli :: FOR API >= 26 >>> 1366733308000

但截至目前,只有 6% 的设备运行在 26 或以上。因此,您将需要上述类的向后兼容性。杰克·沃顿 https://stackoverflow.com/users/132047/jake-wharton已写三十ABP https://github.com/JakeWharton/ThreeTenABP这是基于三十BP https://github.com/ThreeTen/threetenbp,但专门为在 Android 上运行而开发。阅读更多关于如何以及为什么应该使用 ThreeTenABP 来代替 java.time、ThreeTen-Backport 甚至 Joda-Time https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project

所以使用ThreeTenABP,上面的代码可以写成(并在API 16到API 29上验证)

// Below Imports are required for this code snippet
// import java.util.Locale;
// import org.threeten.bp.OffsetDateTime;
// import org.threeten.bp.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
        "EEE MMM dd HH:mm:ss OOOO yyyy", Locale.ROOT);
String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013";
long timeInMilliseconds = OffsetDateTime.parse(givenDateString, formatter)
        .toInstant()
        .toEpochMilli();
System.out.println("Date in milli :: USING ThreeTenABP >>> " + timeInMilliseconds);
// Output is -> Date in milli :: USING ThreeTenABP >>> 1366713508000

Ole 在他的回答中涵盖了总结信息(也适用于 Java),您应该查看一下。


以下是旧方法(以及此答案的先前版本) 现在不应该使用

使用下面的方法

String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013"; 
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
try {
    Date mDate = sdf.parse(givenDateString);
    long timeInMilliseconds = mDate.getTime();
    System.out.println("Date in milli :: " + timeInMilliseconds);
} catch (ParseException e) {
            e.printStackTrace();
}

阅读更多关于日期和时间模式字符串 http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 将日期和时间转换为毫秒 的相关文章

随机推荐