我试图java.time.LocalDate在我的报告中显示以下格式:
<textField pattern="EEEEE dd MMMMM yyyy">
<reportElement x="64" y="0" width="150" height="20" uuid="5e003c53-2327-4f75-9adf-831a3bb494ff"/>
<textElement verticalAlignment="Middle">
<font isBold="true" isUnderline="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{dateFacture}]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)
但我得到的日期如下:2017-03-09。是由于 java.time.LocalDate 类型造成的吗?
在 Java 8 之前,我在代码中使用new Date().getTime()以获取当前时间戳作为数字。我可以假设这Instant.now().toEpochMilli()与传统方式一样安全吗?它是否具有完全相同的行为和相似的性能特征?有没有更好的选择?
我想在所有周围组件仍然使用的生态系统中使用 Java 8 方式new Date().getTime(),因此产生的结果必须一致。
我有这个代码:
String date = "2019-04-22T00:00:00+02:00";
OffsetDateTime odt = OffsetDateTime
.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.withOffsetSameInstant(ZoneOffset.of("+00:00"));
System.out.println(odt);
Run Code Online (Sandbox Code Playgroud)
这个打印: 2019-04-21T22:00Z
如何打印2019-04-21T22:00+00:00?用 offset 代替Z.
我正在使用使用 ThreeTen 日期类型的客户端库(第三方,不是我的,无法更改)。我的项目是 Java 11 并使用 Java 8 日期类型。将 ThreeTeen 对象转换为 Java 8 对象的推荐方法是什么?
在新的日期包的Java 8中,我们使用“更改新日期()”到“LOCALDATE的。的()”。
Date d = new Date(year, month, dayOfMonth); //Old way
LocalDate d2 = LocalDate.of(year, month, dayOfMonth); //new way
Run Code Online (Sandbox Code Playgroud)
当您想要一个新对象时,您通常使用new关键字。这是创建新对象的直观方式。
有时,当您需要延迟初始化的单例时,您可以使用静态方法来获取实例。在这种情况下,您必须调用它,getInstance()以便开发人员知道会发生什么。
这种新语法使代码不那么直观。它迫使您学习如何处理特定对象,而不是简单地使用它们。
这种变化有什么好的理由吗?
Java 8 及更高版本中内置的java.time框架包含Clock该类。这个类提供了一些对测试我们的日期时间处理代码有用的变体。
Instant.now( Clock.fixed?( myInstant , myZoneId ) )
Run Code Online (Sandbox Code Playgroud)
哪个Clock实例表示在java.time调用中隐式使用的默认值,其中我们没有指定Clock?
Instant.now()
Run Code Online (Sandbox Code Playgroud)
我想默认是:
……但文档没有说明是哪个。
在进行单元测试时,有时我们需要一个行为改变的时钟。但是当我们想显式传递一个Clock提供默认行为的对象时,我们使用什么?
假设我们在 01/23/2021 21:00 "Europe/Rome"有一个在意大利米兰的约会。此约会以 UTC 格式保存到数据库中类似于 SQL 标准类型的列中TIMESTAMP WITH TIME ZONE。
现在,居住在美国纽约的用户需要了解此约会何时进行。我们可以向用户显示转换为“America/New_York”时区的日期时间,或者改为“Europe/Rome”TZ。一旦用户从纽约飞往米兰,他就会发现这两个信息都很有用。
关键是存储转换为相同 TZ 引用 (UTC) 的所有内容,并根据您使用与现代 Java 捆绑的java.time框架的目标来操作日期时间。
有道理还是有什么问题/遗漏?
在 Java 8 中,Duration该类提供了该toDays方法,将总天数作为与日历天无关的 24 小时时间块的计数返回。
在 Java 9 中,Duration该类获得了方便的to…Part方法:toDaysPart, toHoursPart, toMinutesPart, toSecondsPart, toMillisPart, toNanosPart。我了解小时、分钟等的需要。但我想知道toDaysPart.
我的问题是:
? 是否会Duration#toDays并且Duration#toDaysPart曾经为特定Duration对象返回不同的值?
我使用此代码收到此错误:
SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM HH:mm yyyy",myDateFormatSymbols);
sdf.parse("????????? 12 ??????? 07:00 2021");
Run Code Online (Sandbox Code Playgroud)
是
"Monday 12 April 07:00 2021"。问题是,每当我将日期从星期一更改为星期二 ( "????????") 时,我都不会收到此错误,并且代码有效。这是代码myDateFormatSymbols:
private final static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){
@Override
public String[] getWeekdays(){
return new String[]{"?????????","????????", "??????", "??????", "???????", "??????", "??????"};
}
@Override
public String[] getMonths() {
return new String[]{...};
}
}
Run Code Online (Sandbox Code Playgroud)
所有月份和工作日都正常工作,似乎这个错误只发生在星期一。
我最近使用LocalDate.atStartOfDay()和回答了一些问题LocalDate.atTime(LocalTime.MIN)。
我想知道为什么没有LocalDate.atEndOfDay()或类似的,所以必须使用LocalDate.atTime(LocalTime.MAX)才能获得特定日期的最后时刻(我认为是 nanos)。
我查看了LocalDateand的来源并LocalTime对此感到有些困惑:
/**
* Combines this date with the time of midnight to create a {@code LocalDateTime}
* at the start of this date.
* <p>
* This returns a {@code LocalDateTime} formed from this date at the time of
* midnight, 00:00, at the start of this date.
*
* @return the local date-time of midnight at the start of this date, not null
*/ …Run Code Online (Sandbox Code Playgroud)