标签: java-time

定义具有整数的日期差的最大时间单位

我有 2 个日期:

LocalDate date1 = LocalDate.now().minusDays(40);
LocalDate date2 = LocalDate.now();
Run Code Online (Sandbox Code Playgroud)

我想弄清楚我可以选择的最大时间单位是什么来定义两者之间的差异(天、月、年),并获取它的数字。我认为,对我来说完美的解决方案是 if Durationapi java.timehad alsotoMonthsPart和toYearsPartas it has toDaysPart. 这样我就可以这样做:

Duration dif = Duration.between(date1, date2);

long daysPart = dif.toDaysPart();
if (daysPart > 0) {
    return ChronoUnit.DAYS.between(date1, date2);
}

long monthPart = dif.getMonthsPart();
if (monthPart > 0) {
    return ChronoUnit.MONTHS.between(date1, date2);
}

long yearPart = dif.getYearsPart();
if (yearPart > 0) {
    return ChronoUnit.YEARS.between(date1, date2);
}

throw new Exception("no difference");
Run Code Online (Sandbox Code Playgroud)

但API中并没有这样的方法。是否有另一个包可以提供此功能,或者您知道实现我的目标的不同方法吗?

java duration date java-time localdate

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

为什么 LocalDateTime.ofInstant() 需要 ZoneId

在爪哇,

  • 如果Instant表示时间点,编码为 UTC 格式的日期和时间。
  • 并LocalDateTime表示一个时间点,编码为 JVM 本地时区中的日期和时间。

那么为什么LocalDateTime.ofInstant()需要 aZoneId作为第二个参数呢?

这LocalDateTime不仅会造成混乱并且可能不正确,而且会使其与ZonedDateTime;相同。因为 的时区LocalDateTime可以是任何时区,就像ZonedDateTime.

java datetime java-time java.time.instant localdatetime

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

LocalDateTime 添加毫秒

我想用 LocalDateTime 增加毫秒值。我使用了plusNanos,因为我没有plusmillisecond。我想知道这是否是正确的方法。我使用的是 JDK 1.8。我也想知道以后的版本是否有加毫秒的功能。

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime ldt = LocalDateTime.parse("2022-01-01 00:00:00.123",f);
        
System.out.println(ldt.format(f));
        
ldt = ldt.plusNanos(1000000);
        
System.out.println(ldt.format(f));
Run Code Online (Sandbox Code Playgroud)
2022-01-01 00:00:00.123
2022-01-01 00:00:00.124
Run Code Online (Sandbox Code Playgroud)

java milliseconds java-time

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

java.lang.IllegalArgumentException:参数值 [2023-12-25T17:19:54.622Z] 与预期类型不匹配 [java.time.ZonedDateTime (n/a)]

我迁移了这段代码:

import org.joda.time.DateTime;

@Entity
@Table(name = "purchases")
@Getter
@Setter
public class Purchases {

  @Column(name = "purchase_time")
  @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
  private DateTime purchaseTime;
}
Run Code Online (Sandbox Code Playgroud)

到这段代码:

import java.time.ZonedDateTime;

@Entity
@Table(name = "purchases")
@Getter
@Setter
public class Purchases {

  @Column(name = "purchase_time")
  private ZonedDateTime purchaseTime;
}
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

2024-01-24 17:20:00.219 ERROR 1 --- [eduler_Worker-1] .a.p.g.i.s.ProcessPendingPurchasesJob : Failed to start/complete pending job.

org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [2023-12-25T17:19:54.622Z] did not match expected type [java.time.ZonedDateTime (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [2023-12-25T17:19:54.622Z] did not match expected type …
Run Code Online (Sandbox Code Playgroud)

spring quartz-scheduler spring-boot java-time zoneddatetime

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

Java 8中的时间戳用户输入

我正在尝试编写一个简单的java程序,用户将在命令提示符下提供两个时间输入,如开始时间"07:51"和结束时间"08:09".我希望使用24小时时钟来避免AM/PM问题,一旦我得到输入,我应该能够在几分钟内找到两次输入之间的差异.我需要在几分钟后计算其他东西.现在我正在尝试使用java.time.*包,所以我可以LocalTime用来捕获它,但还没有成功.

在Java 8中最简单的方法是什么?我可以使用LocalTime吗?

java java-8 java-time

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

对LocalDateTime进行排序

如何排序LocalDateTime对象?

我尝试了以下方法:

Comparator<Data> comparator = new Comparator<Data>() {
    @Override
    public int compare(final data o1, final data o2) {
        if (o1.getDate()== null || o2.getDate() == null)
            return 0;
        return o1.getDate().compareTo(o2.getDate());
    }
};

Collections.sort(comments, comparator);
Run Code Online (Sandbox Code Playgroud)

经过测试,我认为它根据日期排序,但时间部分(HH:MM:SS)被忽略了吗?

java sorting datetime jodatime java-time

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

使用Java 8将ms转换为字符串日期

我有一个ms的时间戳,并使用SimpleDateFormater格式化,如下所示:

SimpleDateFormat sdfDate = new SimpleDateFormat("MM/d/yyyy h:mm a");

return sdfDate.format(new Date(timeStamp));
Run Code Online (Sandbox Code Playgroud)

现在我想改变它以使用新的Java 8功能.好像我真的找不到一种方法来使用新的Java 8类.有人有提示吗?

java datetime java-8 java-time

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

"plusDays"不会在Java 8中推进LocalDate

LocalDate即使运行期间没有错误,为什么不改变?

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse("2005-12-12", formatter);
date.plusDays(3);
System.out.println(date.toString());
Run Code Online (Sandbox Code Playgroud)

输出:

2005-12-12
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

java java-8 java-time

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

在Java8 Date API中将持续时间转换为年份?

我有一个远在过去的约会.
我发现了这个日期和现在之间的持续时间.
现在我想知道 - 多年来这是多少?

我使用Java8 API提出了这个解决方案.
这是一个可怕的解决方案,因为我必须首先手动将持续时间转换为Days,因为UnsupportedTemporalTypeException否则会有- 否则LocalDate.plus(SECONDS)不支持任何原因.
即使编译器允许此调用.

转换Duration成年份的可能性是否较低?

LocalDate dateOne = LocalDate.of(1415, Month.JULY, 6);
Duration durationSinceGuss1 = Duration.between(LocalDateTime.of(dateOne, LocalTime.MIDNIGHT),LocalDateTime.now());

long yearsSinceGuss = ChronoUnit.YEARS.between(LocalDate.now(), 
        LocalDate.now().plus(
                TimeUnit.SECONDS.toDays(
                        durationSinceGuss1.getSeconds()), 
                ChronoUnit.DAYS) );

/*
 * ERROR - 
 * LocalDate.now().plus(durationSinceGuss1) causes an Exception. 
 * Seconds are not Supported for LocalDate.plus()!!!
 * WHY OR WHY CAN'T JAVA DO WHAT COMPILER ALLOWS ME TO DO?
 */
//long yearsSinceGuss = ChronoUnit.YEARS.between(LocalDate.now(), LocalDate.now().plus(durationSinceGuss) );

/*
 * ERROR - 
 * Still an …
Run Code Online (Sandbox Code Playgroud)

java duration date java-8 java-time

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

使用Java 8解析周字符串以进行比较

我想比较几周的字符串表示,例如"01/17"周在"02/17"之前和"52/16"之后.

以下代码抛出一个异常,我猜是因为我的字符串没有暗示每周的确切日期.但是,我不在乎 - 它可能都是星期一或星期四或其他什么:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ww/YY", Locale.GERMANY);
LocalDate date1 = formatter.parse(str1, LocalDate::from);
Run Code Online (Sandbox Code Playgroud)

我需要修改解析器吗?或者解析其他格式?Unfortunatley几周没有像YearMonth这样的对象......

datetime parsing java-8 java-time

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