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

时间:2016-10-15 08:41:14

标签: java android unix android-studio

我来自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?

2 个答案:

答案 0 :(得分:1)

你应该使用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()));

答案 1 :(得分:1)

Answer by Soshin很好。但我个人会分别处理日期和时间。

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 );

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

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore