我想从用户那里获取时间(使用年/月/日/小时/分钟等编辑框)。 我如何将其转换为毫秒(如 getTime 函数)或转换为分钟(如 getTime()/60000)?
DatePicker
,然后使用其中的 getter 来创建 Calendar
对象或获取以毫秒为单位的时间。
我在我的项目中使用此功能从
Calendar
获取DatePicker
,您可能还想扩展它以设置小时/分钟:
public static Calendar getCalenderFromDatePicker(DatePicker dp) {
int day = dp.getDayOfMonth();
int month = dp.getMonth();
int year = dp.getYear();
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
return calendar;
}
一旦有了
Calendar
,您就可以使用 myCalendar.getTimeInMillis()
,它会返回自纪元以来以毫秒为单位的时间 long
。
考虑 java.util.Calendar 类和以下代码:
Calendar calendar = Calendar.getInstance();
int year = 2015;
int month = 4; // "May", months are counting from 0 to 11
int day = 14;
int hour = 14;
int minutes = 15;
int seconds = 16;
// for more clarity I set year/day/month/hours/minutes/seconds separately
// you can also set them at once via calendar.set(year, month, day);
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minutes);
calendar.set(Calendar.SECOND, seconds);
long composedDateInMilliseconds = calendar.getTimeInMillis();
在现代 Java 中,仅使用 java.time 类来进行日期时间工作。
从用户处收集年/月/日/小时/分钟的
int
值。从这些中实例化一个 LocalDateTime
。
LocalDateTime ldt =
LocalDateTime.of(
LocalDate.of( y , m , d ) ,
LocalTime.of( h , m , s )
);
但是日期和时间本身并不能确定时间线上的某个时刻、某个点。目前,我们需要第三条信息:时区(或相对于 UTC 的偏移量)。
您必须从用户那里收集他们的预期时区,以便了解他们的日期和时间。对于任何给定时刻,全球各地的日期和时间都会因时区而异。如果用户输入中午的值,我们需要知道他们是否表示日本东京的中午、法国图卢兹的中午或美国俄亥俄州托莱多的中午——三个不同的时刻,相隔几个小时。
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
通过实例化
ZonedDateTime
对象来组合确定时刻。
ZonedDateTime zdt = ldt.atZone( z ) ;
你问:
如何将其转换为毫秒
我假设您的意思是自 UTC 1970 年第一个时刻 (1970-01-01T00:00Z) 的纪元参考以来的毫秒数。
通过转换为
ZonedDateTime
,将 Instant
调整为 UTC(零小时-分钟-秒的偏移量)。
Instant instant = zdt.toInstant() ;
获取自纪元引用以来的毫秒数。注意数据丢失:
ZonedDateTime
和 Instant
对象都解析为纳秒。询问毫秒将忽略任何微秒和纳秒。
long milliseconds = instant.toEpochMilli() ;
重建
Instant
。
Instant instant = Instant.ofEpochMilli ( milliseconds ) ;
条款:
Continent/Region
.