Android 以毫秒为单位转换时间
Android converting the time in milliseconds
我已经检查了有关以毫秒为单位转换时间的问题,并且我遵循了所有答案,但我仍然得到错误的小时数,尽管分钟和秒都可以。
在我的应用程序中,用户必须 select 来自 TimePickerDialog
的时间并在文本视图中设置时间。例如,它将在时钟中显示 01:30
。它会告诉我 502125000222:30:00
我的代码TimePickerDialog
:
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar mycalendar = Calendar.getInstance();
mycalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
mycalendar.set(Calendar.MINUTE, minute);
mycalendar.set(Calendar.SECOND, 0);
long times = mycalendar.getTimeInMillis();
// hmsTimeFormatter is a method return time format
String timerRemaind = hmsTimeFormatter(times);
//tv_remaindertime is TextView
tv_remaindertime.setText(timerRemaind);
............
还有这个hmsTimeFormatter
转换毫秒的方法:
private String hmsTimeFormatter(long milliSeconds) {
String hms = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(milliSeconds),
TimeUnit.MILLISECONDS.toMinutes(milliSeconds) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliSeconds)),
TimeUnit.MILLISECONDS.toSeconds(milliSeconds) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliSeconds)));
return hms;
}
您好,使用功能强大的库怎么样?它非常简单实用,
它使您免于排队
Joda-Time
用法:
Gradle配置:
compile 'joda-time:joda-time:2.9.9'
更多信息和文档:
https://github.com/JodaOrg/joda-time
http://www.joda.org/joda-time/
编码愉快!
如果我没理解错的话,你想将毫秒转换为 HH:mm:ss。
为此,我们使用 SimpleDateFormat
private String hmsTimeFormatter(long milliSeconds) {
Date date = new Date(milliSeconds);
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
return format.format(date);
}
试一试并将格式语法更改为您喜欢的格式
要了解正在发生的事情:
Calendar.getInstance()
在 JVM 默认时区 中使用当前 date/time 创建一个 Calendar
- 你设置了小时、分钟和秒(我想是
01:30:00
)
- 你调用
getTimeInMillis()
,即returns自unix纪元(1970-01-01T00:00Z
) 以来的毫秒数
然后您将此毫秒值与 TimeUnit
一起使用,但这不是您所需要的。 TimeUnit
会将毫秒数视为 时间量 ,但您需要的是 一天中的时间 :
- a 一天中的时间 是一天中的特定时刻,例如 “上午 10 点” 或 “下午 5:30”。
- 一个 时间量 就是经过的时间量,例如 “10 分 45 秒”,或 “2 年 4 个月 5 天 17 小时”,但它没有附加到特定时间点(“10 分钟相对于什么?”);这只是时间本身。
尽管这两个概念可能使用相同的词("hours"、"minutes"、"seconds" 等),但它们不是一回事。
TimeUnit
处理时间量,因此它会进行类似 “1000 秒等于多少分钟?”.
的转换
示例:TimeUnit.MILLISECONDS.toHours(value)
returns 小时数 相当于 value
毫秒(不是一天中的时间)。由于您使用的值是 getTimeInMillis()
的结果,因此您将获得自 1970 年 1 月以来的总小时数。
通过将 getTimeInMillis()
(代表特定时间点)的结果与 TimeUnit
一起使用,您误用了该值,将其视为一个时间量。
要格式化日期,您可以使用 SimpleDateFormat
:
Calendar mycalendar = Calendar.getInstance();
mycalendar.set(Calendar.HOUR_OF_DAY, 1);
mycalendar.set(Calendar.MINUTE, 30);
mycalendar.set(Calendar.SECOND, 0);
// format: hour:minute:second
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String hms = sdf.format(mycalendar.getTime()); // 01:30:00
有了这个,hms
将具有值 01:30:00
。 Check the javadoc 了解格式 HH:mm:ss
的含义,因此您可以在需要不同格式时更改它(例如,如果您只想要 01:30
,格式将为 HH:mm
).
Java新Date/TimeAPI
旧的 classes(Date
、Calendar
和 SimpleDateFormat
)有 lots of problems and design issues,它们正在被新的 APIs.
在 Android 中您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. To make it work, you'll also need the ThreeTenABP (more on how to use it ).
首先创建一个 org.threeten.bp.LocalTime
(代表一天中某个时间的 class),然后将其格式化为 org.threeten.bp.format.DateTimeFormatter
:
// create time for 01:30
LocalTime time = LocalTime.of(1, 30);
// format: hour:minute:second
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss");
String hms = fmt.format(time);
System.out.println(hms); // 01:30:00
此外,check the javadoc 适用于所有可用格式。
我已经检查了有关以毫秒为单位转换时间的问题,并且我遵循了所有答案,但我仍然得到错误的小时数,尽管分钟和秒都可以。
在我的应用程序中,用户必须 select 来自 TimePickerDialog
的时间并在文本视图中设置时间。例如,它将在时钟中显示 01:30
。它会告诉我 502125000222:30:00
我的代码TimePickerDialog
:
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar mycalendar = Calendar.getInstance();
mycalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
mycalendar.set(Calendar.MINUTE, minute);
mycalendar.set(Calendar.SECOND, 0);
long times = mycalendar.getTimeInMillis();
// hmsTimeFormatter is a method return time format
String timerRemaind = hmsTimeFormatter(times);
//tv_remaindertime is TextView
tv_remaindertime.setText(timerRemaind);
............
还有这个hmsTimeFormatter
转换毫秒的方法:
private String hmsTimeFormatter(long milliSeconds) {
String hms = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(milliSeconds),
TimeUnit.MILLISECONDS.toMinutes(milliSeconds) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliSeconds)),
TimeUnit.MILLISECONDS.toSeconds(milliSeconds) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliSeconds)));
return hms;
}
您好,使用功能强大的库怎么样?它非常简单实用, 它使您免于排队 Joda-Time
用法: Gradle配置:
compile 'joda-time:joda-time:2.9.9'
更多信息和文档:
https://github.com/JodaOrg/joda-time
http://www.joda.org/joda-time/
编码愉快!
如果我没理解错的话,你想将毫秒转换为 HH:mm:ss。 为此,我们使用 SimpleDateFormat
private String hmsTimeFormatter(long milliSeconds) {
Date date = new Date(milliSeconds);
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
return format.format(date);
}
试一试并将格式语法更改为您喜欢的格式
要了解正在发生的事情:
Calendar.getInstance()
在 JVM 默认时区 中使用当前 date/time 创建一个 - 你设置了小时、分钟和秒(我想是
01:30:00
) - 你调用
getTimeInMillis()
,即returns自unix纪元(1970-01-01T00:00Z
) 以来的毫秒数
Calendar
然后您将此毫秒值与 TimeUnit
一起使用,但这不是您所需要的。 TimeUnit
会将毫秒数视为 时间量 ,但您需要的是 一天中的时间 :
- a 一天中的时间 是一天中的特定时刻,例如 “上午 10 点” 或 “下午 5:30”。
- 一个 时间量 就是经过的时间量,例如 “10 分 45 秒”,或 “2 年 4 个月 5 天 17 小时”,但它没有附加到特定时间点(“10 分钟相对于什么?”);这只是时间本身。
尽管这两个概念可能使用相同的词("hours"、"minutes"、"seconds" 等),但它们不是一回事。
TimeUnit
处理时间量,因此它会进行类似 “1000 秒等于多少分钟?”.
的转换
示例:TimeUnit.MILLISECONDS.toHours(value)
returns 小时数 相当于 value
毫秒(不是一天中的时间)。由于您使用的值是 getTimeInMillis()
的结果,因此您将获得自 1970 年 1 月以来的总小时数。
通过将 getTimeInMillis()
(代表特定时间点)的结果与 TimeUnit
一起使用,您误用了该值,将其视为一个时间量。
要格式化日期,您可以使用 SimpleDateFormat
:
Calendar mycalendar = Calendar.getInstance();
mycalendar.set(Calendar.HOUR_OF_DAY, 1);
mycalendar.set(Calendar.MINUTE, 30);
mycalendar.set(Calendar.SECOND, 0);
// format: hour:minute:second
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String hms = sdf.format(mycalendar.getTime()); // 01:30:00
有了这个,hms
将具有值 01:30:00
。 Check the javadoc 了解格式 HH:mm:ss
的含义,因此您可以在需要不同格式时更改它(例如,如果您只想要 01:30
,格式将为 HH:mm
).
Java新Date/TimeAPI
旧的 classes(Date
、Calendar
和 SimpleDateFormat
)有 lots of problems and design issues,它们正在被新的 APIs.
在 Android 中您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. To make it work, you'll also need the ThreeTenABP (more on how to use it
首先创建一个 org.threeten.bp.LocalTime
(代表一天中某个时间的 class),然后将其格式化为 org.threeten.bp.format.DateTimeFormatter
:
// create time for 01:30
LocalTime time = LocalTime.of(1, 30);
// format: hour:minute:second
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss");
String hms = fmt.format(time);
System.out.println(hms); // 01:30:00
此外,check the javadoc 适用于所有可用格式。