给定开始日期的java日期时间差
我有一个时间变量给定开始日期的java日期时间差,java,datetime,jodatime,date-difference,Java,Datetime,Jodatime,Date Difference,我有一个时间变量startDate: startDate = 2018-01-01 00:00:40.554 我想计算endDay,从startDate算起24小时,endHour从startDate算起60分钟 dayDiff = Days.daysBetween(startDate.toLocalDate(), 24hours.toLocalDate()).getDays() 所以基本上: startDate + 1day = endDay startDate + 60mins = en
startDate
:
startDate = 2018-01-01 00:00:40.554
我想计算endDay
,从startDate
算起24小时,endHour
从startDate算起60分钟
dayDiff = Days.daysBetween(startDate.toLocalDate(), 24hours.toLocalDate()).getDays()
所以基本上:
startDate + 1day = endDay
startDate + 60mins = endHour
我假设您使用的是Joda Time,因为您使用了天.Days,介于和之间,我不知道还有其他API使用这样的类和方法
无论如何,Days.daysBetween
计算两个日期/时间之间的差异(一个表示这些日期之间有多少天的数字),但您真正需要的是为日期添加持续时间(1天或1小时)
假设startDate
为a,则可以执行以下操作:
DateTime endDay = startDate.plusHours(24);
DateTime endHour = startDate.plusMinutes(60);
如果startDate
的类型是另一种类型(例如LocalDateTime
),不用担心,所有这些核心类也有类似的方法
我调用了plusHours(24)
,但我也可以使用plusDays(1)
。只需提醒一下,正如评论中所指出的,增加1天并不总是等于增加24小时(更多关于DST问题的信息,请参见)。tl;博士
2018-01-01T01:00:40.554
java.time
该项目现在正在进行中,团队建议迁移到类
ISO 8601
您的输入几乎是java.time类默认使用的标准格式。要遵守,用“<代码> t>代码>替换中间的空间。
String input = "2018-01-01 00:00:40.554".replace( " " , "T" ) ;
LocalDateTime
字符串输入缺少或的指示符。因此,将其解析为一个函数
ldt.toString():2018-01-01T00:00:40.554
时区
请注意,您没有实际的时刻,这不是时间线上的特定点。这只是一个关于26-27小时范围内潜在时刻的模糊概念。要确定实际时刻,请将其放在时区(或偏移量)的上下文中:ZonedDateTime zdt=ldt.atZone(ZoneId.of(“太平洋/奥克兰”)代码>
日期时间数学
您可以将未附加到时间线的时间跨度表示为年、月、日的期间,或小时、分钟、秒的持续时间
Duration d24Hours = Duration.ofHours( 24 ) ;
d24Hours.toString():PT24H
D60分钟。toString():PT1H
调用plus
方法来添加这些时间跨度
LocalDateTime ldtLater = ldt.plus( d60Minutes ) ;
ldtlatter.toString():2018-01-01T01:00:40.554
ldtMuchLater.toString():2018-01-02T00:00:40.554
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(我发现很难理解您的问题-您的描述听起来像是只想计算
endDay
,但您的示例使用endDay
。请花一些时间让您的问题尽可能清楚。您要找的是“如何在java中为日期添加时间?”。一旦你找到了快速指南,你应该会很快找到答案,因为你需要像“开始日期+1天”和“开始日期+1小时”这样的dqte。但你的问题正好相反,“如何获得两个日期之间的差异”.是的..这正是我想要的meant@adu你有没有参考过你正在使用的类的javadoc?答案就在那里,而且很明显。不过,增加24小时和增加一天并不是一回事。
Duration d24Hours = Duration.ofHours( 24 ) ;
Duration d60Minutes = Duration.ofMinutes( 60 ) ;
LocalDateTime ldtLater = ldt.plus( d60Minutes ) ;
LocalDateTime ldtMuchLater = ldt.plus( d24Hours ) ;