如何Long从LocalDateTime或的实例中提取纪元值LocalDate?我尝试了以下内容,但它给了我其他结果:
LocalDateTime time = LocalDateTime.parse("04.02.2014 19:51:01", DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
System.out.println(time.getLong(ChronoField.SECOND_OF_DAY)); // gives 71461
System.out.println(time.getLong(ChronoField.EPOCH_DAY)); // gives 16105
Run Code Online (Sandbox Code Playgroud)
我想要的只是1391539861本地日期时间的值"04.02.2014 19:51:01".我的时区是Europe/OsloUTC + 1,夏令时.
如何将LocalDate转换为java.sql.Date?
尝试:
Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(new Date(date));
Run Code Online (Sandbox Code Playgroud)
这失败了(不会编译),我能找到的就是Joda时间的东西.
我正在使用Java 8
我有一个包含UNIX Epoch时间的字符串,我需要将其转换为Java Date对象.
String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
Date expiry = df.parse(date);
} catch (ParseException ex) {
ex.getStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
标记的线是我遇到麻烦的地方.我无法弄清楚SimpleDateFormat()的参数应该是什么,或者即使我应该使用SimpleDateFormat().
该类的Oracle Tutorial页面Instant显示了此示例代码:
Instant oneHourLater = Instant.now().plusHours(1);
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,编译器抛出错误:
InstantPrint.java:6: error: cannot find symbol
Instant oneHourLater = Instant.now().plusHours(1);
^
symbol: method plusHours(int)
location: class Instant
但是这个Java文档提到了plusHours()方法,但我检查了这个Instant类,它不包含plusHours()方法.
此后,为什么plusHours()在这个例子中提到这个方法呢?
Java 8中新的Date Time API的一个特性应该是纳秒精度.但是,当我将当前日期时间打印到控制台时,就像这样
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss,nnnnnnnnnZ");
System.out.println(OffsetDateTime.now().format(formatter));
Run Code Online (Sandbox Code Playgroud)
我只看到毫秒精度:2015-11-02T12:33:26,746000000 + 0100
操作系统似乎确实支持纳秒精度.当我通过终端打印当前日期时间
date -Ins
Run Code Online (Sandbox Code Playgroud)
我看到2015-11-02T12:33:26,746134417 + 0100
如何在Java中获得纳秒精度?我在Ubuntu 14.04 64位上运行Oracle Java 1.8.0_66
我有一个epoch秒和一个zoneId,方法1.它可以转换为LocalDateTime与系统默认的zoneId,但我找不到方法将第二个转换为LocalDateTime by method2,因为没有ZoneOffset.systemDefault.我认为它是模糊的.
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
val epochSecond = System.currentTimeMillis() / 1000
LocalDateTime.ofInstant(Instant.ofEpochSecond(epochSecond), ZoneId.systemDefault())//method1
LocalDateTime.ofEpochSecond(epochSecond, 0, ZoneOffset.MAX)//method2
Run Code Online (Sandbox Code Playgroud) 尝试转换为时java.util.Date,我收到以下异常java.time.LocalDate.
java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2014-08-19T05:28:16.768Z of type java.time.Instant
Run Code Online (Sandbox Code Playgroud)
代码如下:
public static Date getNearestQuarterStartDate(Date calculateFromDate){
int[] quaterStartMonths={1,4,7,10};
Date startDate=null;
ZonedDateTime d=ZonedDateTime.from(calculateFromDate.toInstant());
int frmDateMonth=d.getMonth().getValue();
Run Code Online (Sandbox Code Playgroud)
我使用ZonedDateTime课程的方式有问题吗?
根据文档,这应该将java.util.Date对象转换为ZonedDateTime.上面的日期格式是标准日期?
我是否必须回到Joda时间?
如果有人可以提供一些建议,那就太好了.
引入了Java 8 java.time.Clock,它可以用作许多其他java.time对象的参数,允许您向它们注入真实或假的时钟.例如,我知道您可以创建一个Clock.fixed()然后调用Instant.now(clock)它将返回Instant您提供的固定.这听起来非常适合单元测试!
但是,我无法弄清楚如何最好地使用它.我有一个类,类似于以下内容:
public class MyClass {
private Clock clock = Clock.systemUTC();
public void method1() {
Instant now = Instant.now(clock);
// Do something with 'now'
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想对这段代码进行单元测试.我需要能够设置clock生成固定时间,以便我可以method()在不同时间进行测试.显然,我可以使用反射将clock成员设置为特定值,但如果我不必诉诸于反射,那将会很好.我可以创建一个公共setClock()方法,但这感觉不对.我不想Clock在方法中添加一个参数,因为真正的代码不应该关注传入时钟.
处理此问题的最佳方法是什么?这是新代码,所以我可以重新组织这个类.
编辑:为了澄清,我需要能够构造一个MyClass对象,但能够让一个对象看到两个不同的时钟值(就好像它是一个常规的系统时钟一样).因此,我无法将固定时钟传递给构造函数.