考虑小时数的Java日历

考虑小时数的Java日历,java,date,time,calendar,Java,Date,Time,Calendar,嗨,伙计们 我正在写一个软件来跟踪房间预订情况。每个房间都有一天的预订时间、开始时间和结束时间。问题是我可能会在两天之间预订(例如从2015年2月18日23:00到2015年2月19日)。 我如何在不要求用户插入结束日期的情况下自动化这个不断增加的过程 我使用Calendar作为日期,但对于小时和分钟,我只从两个文本字段中获取值 您可以指定预订房间的天数。然后,您只需将天数添加到第一个日历对象中。 如何以简单方式添加天数的工作示例: int days = 2; //default duratio

嗨,伙计们
我正在写一个软件来跟踪房间预订情况。每个房间都有一天的预订时间、开始时间和结束时间。问题是我可能会在两天之间预订(例如从2015年2月18日23:00到2015年2月19日)。
我如何在不要求用户插入结束日期的情况下自动化这个不断增加的过程


我使用
Calendar
作为日期,但对于小时和分钟,我只从两个文本字段中获取值

您可以指定预订房间的天数。然后,您只需将天数添加到第一个
日历对象中。
如何以简单方式添加天数的工作示例:

int days = 2; //default duration, placeholder
Calendar now = Calendar.getInstance();
Calendar end = (Calendar) now.clone();
    end.add(Calendar.DATE, days);
然后将
日历结束时间设置为两天内的当前时间

通常我不建议使用
Object.clone()
,但我说这样做是安全的

使用旧的
日历
-API(只有一个
日历
)无法预测时间跨度。但是如果您可以使用新的Java8日期和时间API,您可以使用。如果您需要确定预订的持续时间,它们可能会很有用。
但是,我可以建议您研究一下API,因为我还没有充分地使用它来提供一个有用的示例

tl;博士 2015-02-19T02:00:00+01:00[欧洲/巴黎]

java.time 公认的答案是使用过时的旧遗留日期时间类,这些类已被证明是非常麻烦和混乱的。现在被java.time类取代

要在时间线上指定一个时刻,请包括时区,以提供日期和时间的上下文

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime start = ZonedDateTime.of( 2015 , Month.FEBRUARY , 18 , 23 , 0 , 0 , 0 , z );
作为一个整体跟踪您的保留小时数

ZoneDateTime
类知道如何使用
持续时间进行数学运算

ZonedDateTime zdtStop = zdtStart.plus( duration );
您说您有两个小时和分钟的数据输入字段。将每个文本条目转换为数字。将类a字符串转换为
long
原语

从这些数字中可以得到小时和分钟

Duration duration = Duration.ofHours( Long.parseLong( hoursEntry ) )
                            .plusMinutes( Long.parseLong( minutesEntry ) ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在此处找到一些有用的类,例如、、和。

用户如何在不设置结束日期的情况下指定时间垃圾邮件?显然,属性集(天、开始时间、结束时间)不能满足您的需要。也许(开始日期、开始时间、持续时间)更适合这个问题。这不仅避免了跨越两个日期的预订问题,甚至可以容纳多日预订。所以这是一个按小时出租的不告诉汽车旅馆?谢谢约翰。我还有一个持续时间变量,用于计算客户应支付的金额。由于这是一项基于小时数的服务(这是一个康复室),我并不需要用户键入结束日期,但我必须设法在两天之间预订一次。即使听了你的建议,我也有一个想法:我应该创建一个startCalendar和一个endCalendar。因此,如果endTime介于00和04之间,则允许将endCalendar增加一天。然后,我可以计算两个日历之间的差异,并进行计算。但是:我应该使用哪些函数?我错过了密码。
ZonedDateTime zdtStop = zdtStart.plus( duration );
Duration duration = Duration.ofHours( Long.parseLong( hoursEntry ) )
                            .plusMinutes( Long.parseLong( minutesEntry ) ) ;