即使在阅读了大量教程之后,我也不是真正了解Temporal Adjusters或Java的新时间库.
如何将Instant对象转换为LocalTime对象.我正在思考以下几点:
LocalTime time = LocalTime.of(
instantStart.get(ChronoField.HOUR_OF_DAY),
instantStart.get(ChronoField.MINUTE_OF_HOUR)
);
Run Code Online (Sandbox Code Playgroud)
但它没有用.我该怎么做?
我正在使用Java 8并查询正在返回java.util.Date对象的Mongo数据库.我现在想检查该项目是否在过去30天内.我正在尝试使用新的时间API来使代码更新到更新.
所以我写了这段代码:
java.time.LocalDateTime aMonthAgo = LocalDateTime.now().minusDays(30)
Run Code Online (Sandbox Code Playgroud)
我有一个
java.util.Date dbDate = item.get("t")
Run Code Online (Sandbox Code Playgroud)
我如何比较这两个?
我确信我可以完全使用Dates/Calendars来完成这项工作,或者介绍joda-time.但我更愿意选择更好的Java 8解决方案.
我默认使用时区巴西,但是当捕获到纽约的一个LocalDateTime并转换为java.tim.Instant时,即时填充正确.问题是当我尝试使用Date.from(instantValue)生成一个Date,而不是生成纽约的日期时,我最终得到了来自巴西的当前日期.
ZoneId nyZone = ZoneId.of("America/New_York");
ZoneId brazilZone = ZoneId.of("America/Recife");
LocalDateTime ldtBrazil = LocalDateTime.now(brazilZone);
LocalDateTime ldtNY = LocalDateTime.now(nyZone);
Instant instantBrazil = ldtBrazil.toInstant(ZoneOffset.UTC);
Instant instantNY = ldtNY.toInstant(ZoneOffset.UTC);
System.out.println("-------LocalDateTime-------");
System.out.println("ldtBrazil : "+ldtBrazil);
System.out.println("ldtNY : "+ldtNY);
System.out.println("\n-------Instant-------");
System.out.println("instantBrazil: "+instantBrazil);
System.out.println("instantNY : "+instantNY);
long milliBrazil = instantBrazil.toEpochMilli();
long milliNY = instantNY.toEpochMilli();
System.out.println("\n----------Milli----------");
System.out.println("miliBrazil : "+milliBrazil);
System.out.println("miliNY : "+milliNY);
Date dateBrazil = Date.from(instantBrazil);
Date dateNY = Date.from(instantNY);
System.out.println("\n---------Date From Instant---------");
System.out.println("dateBrazil: "+dateBrazil);
System.out.println("dateNY : "+dateNY);
System.out.println("\n---------Date …Run Code Online (Sandbox Code Playgroud) 如果无法解析简单的日期时间,为什么可以将LocalDateTime对象传递给ZonedDateTime.from()方法,如下所示?
@Test
public void test() throws Exception {
GregorianCalendar.from(ZonedDateTime.from(LocalDateTime.parse("2016-08-31T23:00:59")));
}
Run Code Online (Sandbox Code Playgroud)
结果:
java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2016-08-31T23:00:59 of type java.time.LocalDateTime
at java.time.ZonedDateTime.from(ZonedDateTime.java:565)
Run Code Online (Sandbox Code Playgroud) 如何将DateTimeFormatter转换为DateFormat?我想将DateTimeFormatter转换为DateFormat吗?可能吗 ?
我有一个DateTimeFormatter对象,我想将其传递给其参数仅接受DateFormat的方法。
手头的主题是一个混乱的特定于域的问题,与Oracle的ERP软件JD Edwards中的日期一起使用.其详细信息记录在这个问题中.
在编写用于处理JD Edwards的日期和时间的包装类之前,我想知道JodaTime或Java 8是否为这种独特的时间格式引入了任何特殊支持,或者我是否必须进行重要的字符串操作,无论我使用哪些库.
这是一个模糊的问题,所以请仅在您具备此问题的特定知识和/或JodaTime/Java 8/JSR 310时才做出响应.
附加:根据Basil Bourque的要求,添加伴随上述日期的时间戳示例.以下是来自不同表的日期/时间字段的两个示例:
JCSBMDATE:115100,JCSBMTIME:120102.0
RLUPMJ:114317,RLUPMT:141805.0
此外,日期变量被转换为BigDecimal,时间是Double.所以,我可能会保留字符串解析器,但也可以编写本地采用BigDecimal/Double值的工厂方法.
似乎时间字段实际上是从一天开始的毫秒数(不是秒数),并且可以忽略".0".因此,必须执行转换和计算,如下所示:
localDate.atTime(LocalTime.ofNanoOfDay(Long.parseLong(jdeTime)*1000000))
我需要在C#中使用的那种格式
DateTime.Now.ToString("o").样品返回日期DateTime.Now.ToString("o")是
2016-03-10T11:24:59.7862749 + 04:00
然后在sql中插入为
2016-03-10 11:24:59.786
我正在尝试从java插入相同的日期格式.我用它:
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
Run Code Online (Sandbox Code Playgroud)
它会返回这个
2016-03-10T07:29 + 0000
由于这种格式,它出错了.如何将格式更改为我想要的格式?
假设我的设备在澳大利亚(GMT + 10:00)。
我有一个从API收到的日期“ 2016-04-22T17:45:00 + 02:00”。
我想在原始时区(GMT + 02:00)很好地显示它。
因此,我将SimpleDateFormat与“ yyyy-MM-dd'T'HH:mm:ssZZZZZ”一起使用。
String date = "2016-04-22T17:45:00+02:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(date));
Run Code Online (Sandbox Code Playgroud)
但是不幸的是,我找不到一种显示日期的干净方法:
sdf.format(cal.getTime());
Run Code Online (Sandbox Code Playgroud)
使用设备时区。
因此,我“手动”解析了日期以提取时区以将其设置在日历中。
cal.setTimeZone(TimeZone.getTimeZone("GMT" + date.substring(date.length() - 6, date.length())));
Run Code Online (Sandbox Code Playgroud)
但这似乎并不能解决问题。
我怎样才能做到这一点?