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

标签 android datetime

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

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

我想转换成毫秒,但我实际上不知道它是哪种格式。谁能帮帮我。

最佳答案

Update for DateTimeFormatter introduced in API 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 或更高版本上。因此,您将需要上述类的向后兼容性。 JakeWharton已写 ThreeTenABP这是基于 ThreeTenBP ,但专门为在 Android 上工作而开发。 阅读更多关于 How and Why ThreeTenABP should be used instead-of java.time, ThreeTen-Backport, or even Joda-Time 的信息

所以使用 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),您应该查看一下。


Below is old approach (and previous version of this answer) which should not be used now

使用下面的方法

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

阅读更多关于 date and time pattern strings 的信息.

关于Android将日期和时间转换为毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19419374/

相关文章:

java - RecyclerView 设置最后一个ArrayList项数据为第一项

android - 我可以在 Android App 开发中使用 PostgreSQL 或 mySQL 吗

java - Android - 在抽屉导航的Fragment中调用RecyclerView

powershell - parseexact在Powershell中将所有内容转换为一月份

datetime - 如何将 `write_date` 的值获取到变量

Pandas:将日期列切成周期日期组/箱

java - 在 Java 中将日期格式 dd-MM-yyyy 更改为 yyyy-MM-dd

android - 实现登录(授权)屏幕的最佳做法是什么?

android - 带有支持库的自定义字体在真实设备上不起作用

javascript - 日期计算 - 夏令时 (DST) 和时区问题 - 土耳其