java.time.temporal.Temporal的文档包含以下注释:
实施要求:[...]所有实施必须是可比较的.
为什么Temporal不仅仅扩展可比性?
背景:我想使用类似的时间(不是像LocalDateTime等子类型),并且必须采用一种有点难以辨认的类型<T extends Temporal & Comparable<T>>,这也会混淆NetBeans的自动完成功能.
编辑:我想实现一个时间间隔.包含(Interval i),包含(Temporal t),重叠(...),adjoins(...)等的明显实现使用Comparable :: compareTo(Comparable c)来比较起点和终点,但是互操作性(toDuration(),parse(CharSequence cs))我需要例如Duration :: between(Temporal s,Temporal e)或SubtypeOfTemporal :: parse(CharSequence cs)(产生Temporal).
尝试了4个小时来解决这个问题.
:这很有效
String date = "Jul-01-2014 09:10:12";
LocalDateTime dt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("MMM-dd-yyyy HH:mm:ss", Locale.US));
Run Code Online (Sandbox Code Playgroud)
:这不会
String date = "JUL-01-2014 09:10:12";
LocalDateTime dt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("MMM-dd-yyyy HH:mm:ss", Locale.US));
Run Code Online (Sandbox Code Playgroud)
唯一的区别是所有资本化的月份.七月的正确案例.JUL或jul都不会起作用.我也试过'LLL'模式没有运气.我错过了什么?
我想得到一个java.time.Duration代表3年持续时间的实例,
我找到了两种方法(见下面的代码).
public static void main(String[] args) {
Duration d1 = Duration.of(3, ChronoUnit.YEARS); //Runtime Exception
Duration d2 = ChronoUnit.YEARS.getDuration().multipliedBy(3);
System.out.println("d2="+d2.toDays()); //OUTPUT: d2=1095
}
Run Code Online (Sandbox Code Playgroud)
第一种方法是,d1在运行时抛出以下异常:
Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unit must not have an estimated duration
at java.time.Duration.plus(Unknown Source)
at java.time.Duration.of(Unknown Source)
at mod7.vehicalc.Test.main(Test.java:26)
第二种方式,d2按预期工作.
造成这种差异的原因是什么?
我有两个整数:year和week.我想LocalDateTime从这两个值构造一个,其中日期代表特定年份中特定周的第一天.
我已经尝试过了:
LocalDateTime ldt = LocalDateTime.of(year, 1, 1, 0, 0).plusWeeks(week-1);
Run Code Online (Sandbox Code Playgroud)
这没有给出正确的结果,因为一年的第一天并不总是该年第一周的开始.我似乎无法弄清楚如何获得第一周的第一天.
使用Java 8中的Date和Time API有没有简单的方法呢?
注:我知道我还可以创建一个给定的答案一种解决方法在这里,但这似乎牵强.也许不是,如果是的话,请告诉我!
在计算两个日期之间的年份时,第二个日期是从第一个日期开始计算的(这是我正在研究的一个简化示例),LocalDate并且Period似乎计算一年略有不同.
例如,
LocalDate date = LocalDate.of(1996, 2, 29);
LocalDate plusYear = date.plusYears(1);
System.out.println(Period.between(date, plusYear).getYears());
Run Code Online (Sandbox Code Playgroud)
而
LocalDate date = LocalDate.of(1996, 3, 29);
LocalDate plusYear = date.plusYears(1);
System.out.println(Period.between(date, plusYear).getYears());
Run Code Online (Sandbox Code Playgroud)
尽管明确增加了一年,但第一次Period返回的年份为0第二种情况1.
这有什么好的方法吗?
我需要将以下格式的String解析为2015-01-15-05:00UTC中的LocalDate(或其他).问题是以下代码:
System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));
Run Code Online (Sandbox Code Playgroud)
输出2015-01-15忽略偏移量.期望的输出是2015-01-16
提前致谢!
我试图在特定时区获取当前实例,但它没有按预期工作。关于如何做到这一点的任何想法?
这是我所做的:
Instant.now(Clock.system(ZoneId.of("America/Los_Angeles"))).truncatedTo(ChronoUnit.SECONDS)
Run Code Online (Sandbox Code Playgroud)
但是,返回的即时时间始终是 UTC。我多次更改 ZoneID 并且总是错误。请指教。
编辑:
我正在与使用 timeStamp 生成日志的应用程序进行交互,我需要对这些事件进行操作。立即,如果我使用特定的时间戳启动我的程序,它应该从该时间戳开始读取事件。虽然我的笔记本电脑与生成这些事件的应用程序在同一个时区,但当我得到 Instant.Now() 时,我似乎在 UTC 中。而应用程序根据我们所在的时区生成时间戳。我希望我的程序的时钟与服务器中的时钟相同。
应用程序生成 2016-08-04T18:17:51Z 形式的时间戳
TZUpdater 2.1.0因tzdata2016g版本而失败.对于Java 8,它失败了,"源目录不包含file:VERSION"错误,而它完成了Java 7的"JRE updated to version:tzdataunknown"注释.
这样做的原因似乎是IANA tzdata发布的最近更改:取消设置Makefile的VERSION字段.有关此问题的报告存在错误:https://bugs.openjdk.java.net/browse/JDK-8166928.
DST日期(2016年10月30日)越来越近,我们至少需要一个解决方法.不知何故,这可能吗?
运行我的程序后,我在运行大约 2 小时后发生了奇怪的崩溃,说明它无法解析日期。
Text '2016-10-26T12:31:39.084726218Z' could not be parsed: Unable to obtain Instant from TemporalAccessor: {InstantSeconds=1477485099, NanoOfSecond=84726218},ISO of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1919)
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?因为在网上查找时,我发现这可能是由于格式不正确造成的,但由于我没有指定格式,所以对我来说情况并非如此。
解析我的时间戳的代码如下:
Instant instant = Instant.parse(cAdvisor.getTimestamp());
Long epoch = instant.getEpochSecond();
Run Code Online (Sandbox Code Playgroud)
注意:该cAdvisor.getTimestamp()方法返回一个字符串,例如:'2016-10-26T12:31:39.084726218Z'
注 2:我的 java 版本报告了这一点
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b115)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b57, mixed mode)
Run Code Online (Sandbox Code Playgroud)
更新 #1:以下代码复制了此问题:
import java.time.Instant;
import java.util.Random;
// one class needs to have a main() method
public class Test
{
// arguments are …Run Code Online (Sandbox Code Playgroud) Java 17 中添加了一个新接口。java.time.InstantSource如果该接口的所有实现都是实现,那么该附加抽象的用例是什么Clock?