如何从android中的毫秒获取日期

Posted

技术标签:

【中文标题】如何从android中的毫秒获取日期【英文标题】:how to get date from milliseconds in android 【发布时间】:2012-11-20 00:23:54 【问题描述】:

我有时间在milliseconds,现在我想将timedate 与这些milliseconds分开

我该怎么做???

【问题讨论】:

你能出示你的表格吗? 我在这个答案中找到了最佳解决方案***.com/a/7954038/1677835 @SergeyPekar 虽然这在当时是一个很好的答案,但它使用的是陈旧且设计不佳的类 DateFormatSimpleDateFormatCalendar。很久没有推荐了。 @OleV.V.如您所见,距离我的回答已经过去了 4 年 :-) 【参考方案1】:

您可以使用日期格式并将您的毫秒值设置为此构造函数的参数,遵循以下代码:

SimpleDateFormat SDF= new SimpleDateFormat("dd/MM/yyyy"); 
String date = SDF.format(new Date(millies)));

【讨论】:

该问题已经有一个可接受的答案。你的答案也需要教育解释。【参考方案2】:

java.time 和 ThreeTenABP

我建议 java.time,现代 Java 日期和时间 API,用于您的日期和时间工作:

    long millisecondsSinceEpoch = 1_567_890_123_456L;

    ZonedDateTime dateTime = Instant.ofEpochMilli(millisecondsSinceEpoch)
            .atZone(ZoneId.systemDefault());
    LocalDate date = dateTime.toLocalDate();
    LocalTime time = dateTime.toLocalTime();

    System.out.println("Date: " + date);
    System.out.println("Time: " + time);

在我的时区输出(欧洲/哥本哈根):

Date: 2019-09-07
Time: 23:02:03.456

其他答案中使用的日期和时间类 — CalendarDateSimpleDateFormat — 设计不佳且早已过时。这就是为什么我不推荐使用它们中的任何一个,而是更喜欢 java.time。

问:java.time 不需要 android API 26 级吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6

在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 起)中,现代 API 是内置的。 在非 Android 的 Java 6 和 7 中,获取 ThreeTen Backport,这是现代类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

Oracle tutorial: Date Time 解释如何使用 java.time。 Java Specification Request (JSR) 310,其中首次描述了 java.time。 ThreeTen Backport project,java.time 的反向移植到 Java 6 和 7(JSR-310 的 ThreeTen)。 ThreeTenABP,Android 版 ThreeTen Backport Question: How to use ThreeTenABP in Android Project,解释得很透彻。

【讨论】:

【参考方案3】:

Kiran Kumar 的进一步回答

 public static String getFormattedDateFromTimestamp(long timestampInMilliSeconds, String dateStyle)
        Date date = new Date(); 
        date.setTime(timestampInMilliSeconds);
        String formattedDate=new SimpleDateFormat(dateStyle).format(date);
        return formattedDate;

【讨论】:

【参考方案4】:

milliseconds 转换为Date 实例并将其传递给所选的格式化程序:

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");

String myDate = dateFormat.format(new Date(dateInMillis)));

【讨论】:

【参考方案5】:

你可以这样使用

Calendar cl = Calendar.getInstance();
cl.setTimeInMillis(milliseconds);  //here your time in miliseconds
String date = "" + cl.get(Calendar.DAY_OF_MONTH) + ":" + cl.get(Calendar.MONTH) + ":" + cl.get(Calendar.YEAR);
String time = "" + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE) + ":" + cl.get(Calendar.SECOND);

【讨论】:

月份显示错误。我们在 4 月,我得到了 3 个。此外,虽然在 2012 年使用 Calendar 是一个好主意,但现在已经不是了。我们在java.time, the modern Java date and time API 中做得更好。 我迟到了,但是对于任何想知道的人来说是的......如果我没记错的话,在日历类中,0 = 一月而不是 1,所以它实际上并没有显示错误的月份。但可以理解的是,这可能会令人困惑。【参考方案6】:

使用Calendar 获取不同时间字段的值:

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timeInMillis);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int monthOfYear = cal.get(Calendar.MONTH);

【讨论】:

【参考方案7】:

这个函数会给你一个毫秒的字符串日期

public static String getFormattedDateFromTimestamp(long timestampInMilliSeconds)

    Date date = new Date(); 
    date.setTime(timestampInMilliSeconds);
    String formattedDate=new SimpleDateFormat("MMM d, yyyy").format(date);
    return formattedDate;


【讨论】:

【参考方案8】:

您可以将毫秒转换为日期对象,然后以时间字符串和仅日期字符串的格式提取日期

【讨论】:

我什至不是专门指Date(),但不是,还不是,也不是为了这些目的。不要混淆其他人。 只是setTime 不被弃用。其他方法(大多数)已被弃用。那么为什么要让Date 来设置时间呢?为什么不使用Calnedar class 我没有任何特定课程的议程。但是如果某些方法仍然可以满足我的需要并且显然没有被弃用,我不会把婴儿和洗澡水一起扔出去。 是的,但在 setTime 之后。当他要检索日期时..然后他别无选择^^ 除了使用Calender 类。为什么不收养一个刚出生的婴儿!

以上是关于如何从android中的毫秒获取日期的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 中的 DatePicker 小部件中获取日期?

如何从 Sqlite ( android ) 中的 datetime 字段获取日期

从毫秒获取日期格式 m-d-Y H:i:s.u

日期:Date

Android:从firebase获取当前日期和时间

获取Java中的当前时间(以毫秒为单位)(只是时间,而不是日期)