将小时:分钟AM/PM转换为unix时间戳



我来自PHP背景,但学习Android,所以请原谅我,如果这太基础了。

我有三个变量,分别包含小时、分钟和上午/下午。如何将其转换为unix时间戳,以便以秒为单位获得组合值?

String hours = String.valueOf(hourBox.getText()); // may contain a value like 05
String minutes = String.valueOf(minuteBox.getText()); // may contain a value like 45
String ampm = String.valueOf(ampmBox.getText()); // may contain a value like PM or AM
// PHP way
$timestamp = date('Y-m-d '.$hours.':'.$minutes.' '.$ampm);
echo strtotime($timestamp);
// What would be the equivalent of this in Java?

应该使用LocalDateTime:

    String hours = "05";
    String minutes = "45";
    String ampm = "PM";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd hh:mm a");
    LocalDateTime dateTime = LocalDateTime.parse(String.format("20160101 %s:%s %s", hours, minutes, ampm), formatter);
    System.out.println(dateTime);

如果你还没有LocalDateTime,你可以使用SimpleDateFormat:

    String hours = "05";
    String minutes = "45";
    String ampm = "PM";
    SimpleDateFormat format = new SimpleDateFormat("hh:mm a");
    Date dateTime = format.parse(String.format("%s:%s %s", hours, minutes, ampm));
    System.out.println(dateTime);

如你所见,代码几乎是一样的。

如果要保留当前日期,请切换到日历:

    String hours = "05";
    String minutes = "45";
    String ampm = "PM";
    Calendar calendar = GregorianCalendar.getInstance();
    calendar.setTime(new Date());
    calendar.set(Calendar.HOUR, Integer.parseInt(hours));
    calendar.set(Calendar.MINUTE, Integer.parseInt(minutes));
    calendar.set(Calendar.AM_PM, "AM".equals(ampm) ? 0 : 1);
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
    System.out.println(format.format(calendar.getTime()));

Soshin的《The Answer》很好。但我个人会把日期和时间分开处理。

LocalDate

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "uuuuMMdd" );
LocalDate ld = LocalDate.parse( "20160101" , dateFormatter );

LocalTime

和一天中的时间。不需要AM/PM部分;格式化代码指示期望的时间是12小时制还是24小时制。

DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern( "hhmm" );  // hh = two digits of 12-hour time (1-12). mm = minute-of-hour.
LocalDate ld = LocalDate.parse( hours + minutes , timeFormatter );  // 0545 in afternoon.

LocalDateTime

您可以将它们组合成一个LocalDateTime

LocalDateTime ldt = LocalDateTime.of( ld , lt );

ZonedDateTime

如果您确定该值的预期时区,则应用ZoneId来获得ZonedDateTime

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ldt.atZone( z );

A LocalDateTime没有意义;如果没有utc的偏移量或时区,它就不是一个实际的时刻。相比之下,ZonedDateTime确实是时间轴上的一个实际点。

关于java.time

java。时间框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date, .Calendar, &java.text.SimpleDateFormat .

Joda-Time项目,现在处于维护模式,建议迁移到java.time.

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。

从哪里获取java。时间类?

  • Java SE 8SE 9及以后版本
    • 内置。
    • 标准Java API的一部分,捆绑实现。
  • Java 9增加了一些小的特性和修复。
  • Java SE 6SE 7
    • 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport
  • Android
    • ThreeTenABP项目适应ThreeTen-Backport(上面提到的)Android。
  • 参见如何使用…
  • three - ten - extra项目扩展了java。有额外课程的时间。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。

    最新更新