我有 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中并没有这样的方法。是否有另一个包可以提供此功能,或者您知道实现我的目标的不同方法吗?
在爪哇,
Instant表示时间点,编码为 UTC 格式的日期和时间。LocalDateTime表示一个时间点,编码为 JVM 本地时区中的日期和时间。那么为什么LocalDateTime.ofInstant()需要 aZoneId作为第二个参数呢?
这LocalDateTime不仅会造成混乱并且可能不正确,而且会使其与ZonedDateTime;相同。因为 的时区LocalDateTime可以是任何时区,就像ZonedDateTime.
我想用 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) 我迁移了这段代码:
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) 我正在尝试编写一个简单的java程序,用户将在命令提示符下提供两个时间输入,如开始时间"07:51"和结束时间"08:09".我希望使用24小时时钟来避免AM/PM问题,一旦我得到输入,我应该能够在几分钟内找到两次输入之间的差异.我需要在几分钟后计算其他东西.现在我正在尝试使用java.time.*包,所以我可以LocalTime用来捕获它,但还没有成功.
在Java 8中最简单的方法是什么?我可以使用LocalTime吗?
如何排序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)被忽略了吗?
我有一个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类.有人有提示吗?
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)
我错过了什么?
我有一个远在过去的约会.
我发现了这个日期和现在之间的持续时间.
现在我想知道 - 多年来这是多少?
我使用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) 我想比较几周的字符串表示,例如"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这样的对象......