如何从android中的毫秒获取日期
Posted
技术标签:
【中文标题】如何从android中的毫秒获取日期【英文标题】:how to get date from milliseconds in android 【发布时间】:2012-11-20 00:23:54 【问题描述】:我有时间在milliseconds
,现在我想将time
和date
与这些milliseconds
分开。
我该怎么做???
【问题讨论】:
你能出示你的表格吗? 我在这个答案中找到了最佳解决方案***.com/a/7954038/1677835 @SergeyPekar 虽然这在当时是一个很好的答案,但它使用的是陈旧且设计不佳的类DateFormat
、SimpleDateFormat
和 Calendar
。很久没有推荐了。
@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
其他答案中使用的日期和时间类 — Calendar
、Date
和 SimpleDateFormat
— 设计不佳且早已过时。这就是为什么我不推荐使用它们中的任何一个,而是更喜欢 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 小部件中获取日期?