将java.util.Date对象转换为新的JDK 8/JSR-310 的最佳方法是什么java.time.LocalDate?
Date input = new Date();
LocalDate date = ???
Run Code Online (Sandbox Code Playgroud) 我写了以下代码
Date d = new Date();
CharSequence s = DateFormat.format("MMMM d, yyyy ", d.getTime());
Run Code Online (Sandbox Code Playgroud)
但是问我参数,我想要字符串格式的当前日期,
喜欢
28-Dec-2011
Run Code Online (Sandbox Code Playgroud)
这样我就可以设置了TextView,
解释一下,如果你认为有必要,我是Android开发的新手.
我想做的事情如下:
Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"
Run Code Online (Sandbox Code Playgroud)
怎么做?
有没有一种简单的方法将LocalDate(用Java 8引入)转换为java.util.Date对象?
通过'简单',我的意思是比这更简单:
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点尴尬.
由于我们只对日期部分感兴趣,并且两个对象中都没有时区信息,为什么要明确引入时区?应该隐式采用午夜时间和系统默认时区进行转换.
鉴于今天的时间,例如下午2:24,如何让它到下午2:30?
同样,如果时间是下午2:17,我如何让它到下午2:15?
编辑:嗯,显然这是基于意见,所以让我试着更准确地改写它 -
在不需要任何向后兼容性的Java代码中使用LocalDate,LocalTime等有任何明确的警告或缺点,如果是这样 - 它们是什么?
我正在寻找像"当前EE库X和Y无法正确使用LocalDate"或"这个非常有用的模式被LocalTime打破"等等.
(这是原始问题供参考)
在Java 8中,引入了新的时间API,即java.time.LocalDate等,但java.util.Date未标记为已弃用.
我正在编写一个新项目,它不需要向后兼容.我应该只使用LocalDate,LocalDateTime等吗?使用这个新API是否有任何缺点,而不是旧的java.util.Date?
特别是 - 我将主要使用JDBC.从我所看到的JDBC很好地处理java.util.Date.它是否适合LocalDate?
搜索产生了许多网站,告诉他们如何从一种格式转换为另一种格式,但是如果新代码使用旧的API,则没有明确的答案.
谢谢.
如何java.sql.Date将从JDBC数据库返回的数据转换为java.time.LocalDateTime?
我一直在尝试使用Java 8中内置的java.time包将"DateTime"转换为毫秒.
但我无法正确地做到这一点.我想将"29/Jan/2015:18:00:00"转换为毫秒.以下是我尝试过的
Instant instant = Instant.parse("2015-01-29T18:00:00.0z");
Long instantMilliSeconds = Long.parseLong(instant.getEpochSecond() + "" + instant.get(ChronoField.MILLI_OF_SECOND));
System.out.println(new Date(instantMilliSeconds)); // prints Sun Jun 14 05:06:00 PDT 1970
Run Code Online (Sandbox Code Playgroud)
我尝试过使用LocalDateTime,但找不到有效转换为毫秒的方法.我并不是说这是最好的方法,如果你知道更好的东西,我会非常感谢一些指示.
我默认使用时区巴西,但是当捕获到纽约的一个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)