我正在使用Calendar
作为日期,但是对于小时和分钟,我只从两个TextField中获取值。
答案 0 :(得分:0)
您可以指定预订房间的天数。然后,您只需要为第一个Calendar
对象添加天数
工作示例如何以简单的方式添加日期:
int days = 2; //default duration, placeholder
Calendar now = Calendar.getInstance();
Calendar end = (Calendar) now.clone();
end.add(Calendar.DATE, days);
然后将Calendar end
设置为两天内的当前时间。
通常我不建议使用Object.clone()
,但this answer表示这样做是安全的。
无法使用旧的Calendar
- API(只有一个Calendar
)预测时间跨度。但是,如果您可以使用新的Java 8 Date and Time API,则可以使用Periods und Durations。如果您需要确定预订的持续时间,它们可能会有用
但是,我可以建议您查看API,因为我没有使用它来提供一个有用的示例。
答案 1 :(得分:0)
ZonedDateTime.of( 2015 , Month.FEBRUARY , 18 , 23 , 0 , 0 , 0 , ZoneId.of( "Europe/Paris" ) )
.plus( Duration.ofHours( 3 ) )
2015-02-19T02:00:00 + 01:00 [欧洲/巴黎]
接受的答案使用过时的旧遗留日期时间类,这些类已被证明是如此麻烦和令人困惑。现在取代了java.time类。
要在时间线上指定片刻,请添加时区以显示日期和时间。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime start = ZonedDateTime.of( 2015 , Month.FEBRUARY , 18 , 23 , 0 , 0 , 0 , z );
将您预订的小时数追踪为Duration
。
Duration duration = Duration.ofHours( 3 );
ZonedDateTime
类知道如何使用Duration
进行数学运算。
ZonedDateTime zdtStop = zdtStart.plus( duration );
你说你有几个小时和分钟的数据输入字段。将每个文本条目转换为数字。 Long
类parses为long
原语的字符串。
从这些数字中获得Duration
小时和分钟。
Duration duration = Duration.ofHours( Long.parseLong( hoursEntry ) )
.plusMinutes( Long.parseLong( minutesEntry ) ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& 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。