我对日期对象不是很熟悉,所以我想我会问如何让用户输入一个与我发现的以下方法兼容的日期,以找出天数的差异:
public long diferenciaFecha(LocalDate pfecha1, LocalDate pfecha2){
LocalDate fecha1 = pfecha1;
LocalDate fecha2 = pfecha2;
Period p = Period.between(fecha1, fecha2);
long resul = ChronoUnit.DAYS.between(fecha1, fecha2);
System.out.println(" Han pasado: " + resul + " dias.)");
return resul;
}
}
输入格式是什么样的?
提前多多感谢
答案 0 :(得分:1)
与时间相关的编程可能非常令人沮丧。发明了Temporal Classes是为了帮助操纵时间值并帮助将文本和数值转换为时间值。如果您正在使用诸如LocalDate和ChronoUnit之类的Java类,您可以通过简单的Google搜索类名在Oracle网站上查找它们。
如果你有几天的麻烦,我强烈建议你给临时课程一个评论,因为当你操纵时间和时区等。它会更复杂。
http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
“公共最终类LocalDate
扩展对象
实现Temporal,TemporalAdjuster,ChronoLocalDate,Serializable
ISO-8601日历系统中没有时区的日期,例如2007-12-03。 “
http://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html
答案 1 :(得分:1)
您的代码似乎在Java 8中使用新的java.time包。当然,请查看import
语句。
LocalDate类使用static factory method来创建实例而不是构造函数。有关多种方法,请参阅the doc。
LocalDate now = LocalDate.now ( ZoneId.of( "America/Montreal" ) );
或者...
LocalDate localDate = LocalDate.of( 2014, 1, 23 ); // year, month, day.
如果用户输入文本,则解析为数字。
LocalDate localDate = LocalDate.of( Integer.parseInt( "2014") , Integer.parseInt( "1") , Integer.parseInt( "23") );
或者以标准ISO 8601格式解析为一个字符串。
LocalDate localDate = LocalDate.parse( "2014-01-23" ) ;
对于其他格式,请搜索Stack Overflow,以获取使用DateTimeFormatter
类解析字符串的许多讨论和示例。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。