我来自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?
答案 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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。