android - 显示剩余分钟数而不是小时数
问题描述
我需要你的帮助来显示剩余的分钟数而不是小时数
15 分钟而不是 15:30
示例: 开始预订的剩余时间:15 分钟
private Notification getNotification(Date countdownEnds) {
DateFormat timeFormat = countdownTimeFormatFactory.getTimeFormat();
String countdownEndsString = timeFormat.format(countdownEnds);
String title = resources.getString(R.string.countdown_notification_title);
String text = resources.getString(R.string.countdown_notification_text, countdownEndsString);
PendingIntent tapIntent =
PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(text)
.setTicker(title)
.setSmallIcon(R.mipmap.ic_launcher)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(tapIntent)
.setOngoing(true)
.setAutoCancel(false);
return builder.build();
}
public DateFormat getTimeFormat() {
return android.text.format.DateFormat.getTimeFormat(context);
}
kod:代码
解决方案
准系统解决方案:
long remainingMillis = countdownEnds.getTime() - System.currentTimeMillis();
long remainingMinutes = TimeUnit.MILLISECONDS.toMinutes(remainingMillis);
String countdownEndsString = String.format("%d minutes", remainingMinutes);
要获得更好的解决方案java.time
,请使用现代 Java 日期和时间 API 来计算分钟:
long remainingMinutes = ChronoUnit.MINUTES.between(
Instant.now(), DateTimeUtils.toInstant(countdownEnds));
在这种情况下,还要看看您是否可以完全摆脱使用,Date
因为该类早已过时,并且所有功能和更多功能都在java.time
. 在最后一个片段中,我使用了 ThreeTen Backport(参见下面的解释和链接)及其DateTimeUtils
类。对于阅读并使用 Java 8 或更高版本但仍未摆脱Date
该类的任何人,转换内置于该类中,因此它稍微简单一些:
long remainingMinutes
= ChronoUnit.MINUTES.between(Instant.now(), countdownEnds.toInstant());
您可能还想查看Duration
.java.time
问题:我可以在 Android 上使用 java.time 吗?
是的,java.time
在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6。
- 在 Java 8 及更高版本以及较新的 Android 设备(据我所知,从 API 级别 26 开始)中,现代 API 是内置的。
- 在 Java 6 和 7 中获得 ThreeTen Backport,即新类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
- 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从
org.threeten.bp
子包中导入日期和时间类。
链接
- Oracle 教程:日期时间解释如何使用
java.time
. - Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
推荐阅读
- javascript - 如果超过 3 li 隐藏其余部分并附加 html JQuery
- php - 如何在laravel中将数据从一个表插入另一个表?
- c++ - 如何从所有成员在 C++ 中公开的封闭类访问嵌套类成员函数?
- python - subprocess.run() 不返回任何输出
- object - Primefaces 自动完成展示选择了错误的国家对象
- react-native - 反应从 api 获取的本机下拉 pciker
- laravel - 在 Laravel 中显示存储的图像
- angular - 离子路由器创建 ionic-page-invisible 且未删除
- python - 如何使用递归列出目录和子目录中的现有文件?
- c# - 使用两个输入从 C# 中的数据库中选择数据