Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给定开始日期的java日期时间差_Java_Datetime_Jodatime_Date Difference - Fatal编程技术网

给定开始日期的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 ) ;