获取年/月/日/小时/分钟的时间并转换为毫秒,如java或android中的getTime()

问题描述 投票:0回答:3

我想从用户那里获取时间(使用年/月/日/小时/分钟等编辑框)。 我如何将其转换为毫秒(如 getTime 函数)或转换为分钟(如 getTime()/60000)?

java clock
3个回答
1
投票

您可以使用

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


1
投票

考虑 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();

0
投票

java.time

在现代 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 ) ;

条款:

  • Offset 只是比 UTC 时间子午线提前/落后的小时数、分钟数、秒数。
  • 时区是特定地区人民使用的偏移量的过去、现在和未来变化的命名历史,由他们的政客决定。专有名称使用格式
    Continent/Region
    .
© www.soinside.com 2019 - 2024. All rights reserved.