相关疑难解决方法(0)

在Java中,如何获得2个日期之间的秒数差异?

Java类库有一个名为DateTime的类.DateTime有这个方法:

int daysBetween(DateTime other)
Run Code Online (Sandbox Code Playgroud)

返回此参数与参数之间的天数.它没有方法

int secondsBetween(DateTime other)
Run Code Online (Sandbox Code Playgroud)

我碰巧需要它.是否有一个类似于DateTime的类但有这样的方法?

java datetime date

64
推荐指数
7
解决办法
13万
查看次数

为什么没有时间包含在Java的Period类中?

在Joda-Time库中,Period该类表示一段时间,包括年,月,日,小时,分钟等.

但是,在Java Time API中,Period类只能包含若干年,月和日.

为什么我不能在Java的Period对象中包含时间,那么什么是表达"2天1小时"之类的东西的最佳方式呢?

我知道Duration班级,但不允许指定"2天1小时"; 49小时的持续时间可能与"2天1小时"(DST,......)不同.

java jodatime java-time

9
推荐指数
0
解决办法
102
查看次数

如何使用Java 8中的LocalDateTime计算两个日期之间的时差?

有很多答案,但我无法找到与我的情况兼容.我需要找到8小时的差异以及日期变化.就像时间大于8小时然后不执行某些事情.

我们有没有LocalDateTime在Java-8中实现相同的方法?

我试过使用以下但无法实现相同的目标.

LocalDateTime fromDateTime = LocalDateTime.of(2017, 07, 07, 07, 00, 55);
LocalDateTime toDateTime = LocalDateTime.now();
LocalDateTime tempDateTime = LocalDateTime.from(fromDateTime);

long years = tempDateTime.until(toDateTime, ChronoUnit.YEARS);
tempDateTime = tempDateTime.plusYears(years);

long months = tempDateTime.until(toDateTime, ChronoUnit.MONTHS);
tempDateTime = tempDateTime.plusMonths(months);

long days = tempDateTime.until(toDateTime, ChronoUnit.DAYS);
tempDateTime = tempDateTime.plusDays(days);

long hours = tempDateTime.until(toDateTime, ChronoUnit.HOURS);
tempDateTime = tempDateTime.plusHours(hours);

long minutes = tempDateTime.until(toDateTime, ChronoUnit.MINUTES);
tempDateTime = tempDateTime.plusMinutes(minutes);

long seconds = tempDateTime.until(toDateTime, ChronoUnit.SECONDS);

System.out.println("" + java.time.Duration.between(tempDateTime, toDateTime).toHours());

System.out.println(years + " years "
        + months + " …
Run Code Online (Sandbox Code Playgroud)

datetime datediff date java-8

8
推荐指数
2
解决办法
2万
查看次数

Java从LocalDateTime Bar中减去LocalDateTime foo

我知道这可能是一个非常愚蠢的问题,但我想知道是否有办法减去另一个本地日期时间,或者如果没有,将localDateTime强制转换为日期时间然后从那里减去?

我需要能够计算日期时间差,在记录foo的开始和记录栏的开始之间(这也是Foo的结束)

我对java很新,为了简单起见,我希望能够将它保持在大致相同的布局中,而不是必须从秒等转换.

如果添加和减去LocalDateTime不是一个选项,我知道一旦我在dateTime,我可以使用以下方法减去它们:

Period diff = new Period(start, end);
Run Code Online (Sandbox Code Playgroud)

由于数据的目的,我需要保留日期和时间以使其工作,并且如前所述,我希望保持相当简单,因此不需要在秒之间转换回日期.

我的问题实际上只是以可接受的格式得到它,正如我所说,我对java和对象方向整体都是新手,所以请不要嘲笑我这个看似简单的问题.

谢谢,

强尼

java time datetime casting date

7
推荐指数
2
解决办法
9482
查看次数

将 org.joda.time.Period 转换为 java.time.Period

我正在尝试用 java.time 替换 org.joda.time.Period 。

我们将以下值存储在数据库中。

P1M, P1Y, P1D, PT1H, PT1M
Run Code Online (Sandbox Code Playgroud)

只是为了解析这个值:

Period monthly = ISOPeriodFormat.standard().parsePeriod(<One of the above value from DB>);
Run Code Online (Sandbox Code Playgroud)

这很简单并且得到预期的周期。但是,现在换成java.time就麻烦了。

因为,P1D, P1M, P1Y应该使用以下代码进行解析:

java.time.Period period = java.time.Period.parse("P1M");
Run Code Online (Sandbox Code Playgroud)

并且,P1H and P1D应该使用下面的代码进行解析。

Duration dailyD = Duration.parse("P1D");
Run Code Online (Sandbox Code Playgroud)

所以,我可能还需要一些字符串检查,例如:

if(value.startsWith("PT")) {
   // Use java.time.Duration
} else {
   // Use java.time.Period
}
Run Code Online (Sandbox Code Playgroud)

这个逻辑有更好的代码吗?

另外,最后,我必须根据上面的 java.time.Period 或 java.time.Duration 查找从某个 startTime 到 截至日期 的出现次数。

就像,如果 startDateTime 是01/01/2015 08:30

LocalDateTime startDateTime = // the above startDateTime ..

    if(value.startsWith("PT")) { …
Run Code Online (Sandbox Code Playgroud)

java java-time

5
推荐指数
1
解决办法
2555
查看次数

Java用时间戳计算时间

我试图计算两个时间戳之间的时间差,这是代码:

        Calendar calendar = Calendar.getInstance();
        java.util.Date now = calendar.getTime();
        Timestamp currentTimestamp = new Timestamp(now.getTime());
        System.out.println("Current\n"+currentTimestamp);

        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = dateFormat.parse("28/02/2015");
        Timestamp timestampBefore = new Timestamp(date.getTime());
        System.out.println("Before\n"+timestampBefore);

        Timestamp calculated = new Timestamp(currentTimestamp.getTime() - timestampBefore.getTime());
        System.out.println("Calculated\n"+calculated);
Run Code Online (Sandbox Code Playgroud)

输出:

Current
2015-02-28 12:12:40.975
Before
2015-02-28 00:00:00.0
Calculated
1970-01-01 13:12:40.975
Run Code Online (Sandbox Code Playgroud)
  1. 我可以理解为什么它会返回1970-01-01,但为什么它会13:12:40.975多返回 1 小时?

  2. 如何计算两个日期之间的差异,以便输出如下(基于此示例):
    年:0,月:0,天:0,小时:12,分钟:12,秒:40?

更新:对于低于 1.8 的 java,请查看http://www.joda.org/joda-time/index.html
,对于 java 1.8,请参阅答案。

此处类似的解决方案: Java 8:计算两个 LocalDateTime 之间的差异

java timestamp calendar date

3
推荐指数
1
解决办法
8752
查看次数

Java LocalDate 检查是否 18 岁及以上

我有 2 个本地日期,一个是生日,一个是今天的日期。比较它们并检查年龄是否为 18 岁及以上的最快方法是什么?我是否需要将其转换为字符串并拆分它们然后将它们 1 x 1 进行比较?或者有另一种比较方法吗?

java date

2
推荐指数
2
解决办法
5654
查看次数

计算两个 OffsetDateTimes 之间的月数

我正在使用 java 8 并且我正在尝试计算两个 OffsetDateTime 对象之间的月数。做这个的最好方式是什么?

java datetime date-difference java-time

2
推荐指数
2
解决办法
775
查看次数

Java jsr310:日期和时间之间的差异

有很多SO问题涉及计算Java中两个日期或两个日期之间的差异.许多答案指出了核心Java Date类的问题,并建议使用Jodatime,但AFAIK,没有任何建议使用jsr310如何做到这一点.

那么,有什么方法可以在jsr310中计算两个日期或两个日期之间的差异吗?


作为参考,以下问题可以解决此问题:

在核心Java中:

在Jodatime:

java datetime date jsr310

1
推荐指数
1
解决办法
2911
查看次数

计算两个日历日期之间的工作日差异

我试图找到两个日期之间的工作日计数(周末和时间必须忽略).我正在使用以下功能来做到这一点.但它给出了多种情况的错误结果,例如,如果startdate是周末还是enddate是周末.这是一个演示的例子,可以计算一天额外的一天.

2018-03-08 00:00:00.0和2018-04-22 01:37:29.887

计数返回32(应该是31,它也在考虑23-04-2018).请提供一些完美的解决方案/方法来做同样的事情.

private static int calculateDuration(Date startDate, Date endDate)
{
  Calendar startCal = Calendar.getInstance();
  startCal.setTime(startDate);
  startCal.set( Calendar.HOUR_OF_DAY, 0 );
  startCal.set( Calendar.MINUTE, 0 );
  startCal.set( Calendar.SECOND, 0 );
  startCal.set( Calendar.MILLISECOND, 0 );
  Calendar endCal = Calendar.getInstance();
  endCal.setTime(endDate);
  endCal.set( Calendar.HOUR_OF_DAY, 0 );
  endCal.set( Calendar.MINUTE, 0 );
  endCal.set( Calendar.SECOND, 0 );
  endCal.set( Calendar.MILLISECOND, 0 );
  int workDays = 0;

  if (startCal.getTimeInMillis() > endCal.getTimeInMillis())
  {
    startCal.setTime(endDate);
    endCal.setTime(startDate);
  }

  do
  {
    startCal.add(Calendar.DAY_OF_MONTH, 1);
    System.out.println("************"+Calendar.DAY_OF_WEEK);
    System.out.println("Before weekend condition"+Calendar.DAY_OF_WEEK+"Workdays="+workDays);

    if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && …
Run Code Online (Sandbox Code Playgroud)

java date weekday date-difference

1
推荐指数
1
解决办法
235
查看次数