在java.timeJDK 8中的JSR-310 API中,计算将日期添加到日期的结果的规则是什么.特别是,当您将1个月添加到1月31日这样的日期时会发生什么?
LocalDate initial = LocalDate.of(2012, 1, 31); // 31st January 2012
LocalDate result = initial.plusMonths(1);
// what is the result?
Run Code Online (Sandbox Code Playgroud) 有关我的问题在这里 -我怎么原来pattern给定的String DateTimeFormatter?
这里的其他答案指的是Joda API.我想用它来做java.time.
假设今天的日期是2015年11月26日 - 星期四,当我增加2个工作日时,我希望结果为2015年11月30日星期一.
我正在开发自己的实现,但如果已经存在的话会很棒!
编辑:
除了循环之外,有没有办法做到这一点?
我试图得到一个像这样的函数:
Y = f(X1,X2) where
Y is actual number of days to add,
X1 is number of business days to add,
X2 is day of the week (1-Monday to 7-Sunday)
Run Code Online (Sandbox Code Playgroud)
然后给出X1和X2(从日期的星期几得出),我们可以找到Y然后使用plusDays()方法LocalDate.
到目前为止,我还没有得出它,它不一致.任何人都可以确认循环,直到添加所需的工作日数是唯一的方法吗?
我需要以UTC格式保存并显示我的服务器中发生的事件的日期时间.我可以选择使用Instant.now()或LocalDateTime.now(ZoneOffset.UTC)
我什么时候应该更喜欢一个?
我得到的日期时间值为
created_at '2012-02-22T02:06:58.147Z'
Read-only. The time at which this task was created.
Run Code Online (Sandbox Code Playgroud)
这是由Asana API提供的
我Java 8用来解析日期时间如下
import java.time.*;
import java.time.format.*;
public class Times {
public static void main(String[] args) {
final String dateTime = "2012-02-22T02:06:58.147Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SX");
final ZonedDateTime parsed = ZonedDateTime.parse(dateTime, formatter);
System.out.println(parsed);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误
Exception in thread "main" java.time.format.DateTimeParseException: Text '2012-02-22T02:06:58.147Z' could not be parsed at index 21
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
at Times.main(Times.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) …Run Code Online (Sandbox Code Playgroud) 我目前有一个Joda日期解析器,它使用DateTimeFormatterBuilder,我可能会收到六种不同的日期格式.
我正在迁移到Java 8的Date例程,并没有看到等效的.
如何使用Java 8 Dates做这样的事情?
DateTimeParser[] parsers = {
DateTimeFormat.forPattern( "yyyy/MM/dd HH:mm:ss.SSSSSS" ).getParser() ,
DateTimeFormat.forPattern( "yyyy-MM-dd HH:mm:ss" ).getParser() ,
DateTimeFormat.forPattern( "ddMMMyyyy:HH:mm:ss.SSS Z" ).getParser() ,
DateTimeFormat.forPattern( "ddMMMyyyy:HH:mm:ss.SSS" ).getParser() ,
DateTimeFormat.forPattern( "ddMMMyyyy:HH:mm:ss.SSSSSS" ).getParser() ,
DateTimeFormat.forPattern( "yyyy-MM-dd HH:mm:ss.SSS" ).getParser()
};
DateTimeFormatter dateTimeFormatterInput = new DateTimeFormatterBuilder()
.append( null, parsers ).toFormatter();
Run Code Online (Sandbox Code Playgroud) 得到ZoneId它像:
ZoneId.of("America/Sao_Paulo");
Run Code Online (Sandbox Code Playgroud)
要么
ZoneId.of(ZoneId.SHORT_IDS.get("BET"));
Run Code Online (Sandbox Code Playgroud)
为什么不存在Enum这样的价值的原因,如:
ZoneId.of(ZoneIds.AMERICA_SAO_PAULO);
Run Code Online (Sandbox Code Playgroud)
这似乎不容易出错,而且更加自动完成友好?
我试图在我的Android应用程序中使用java.time.LocalDate,但是如果我尝试导入它,那么java.time中的任何类都会在Android Studio 1.1中无法解析符号错误
我能解决这个问题的唯一原因是它不支持java 8.真的是这样吗?
我的要求是将所有日期和日期时间以UTC时区存储在数据库中.我正在使用Java 8 LocalDate和LocalDateTime我的Hibernate实体.
那是正确的,因为LocalDate与LocalDateTime不具有与之相关联的时区?
如果没有,我应该回到使用好旧(或传统?)Date&Timestamp?
或者我应该使用Java 8 Instant?如果使用Instant,是否有可能只存储日期部分,没有时间?
数据库是MySQL和SQL Server,这是一个Spring Boot应用程序.
我注意到java.time.Period类包含一些与可用的静态工厂方法相同的实例方法.
.withDays() 行为与...相同 Period.ofDays().withMonths() 行为与...相同 Period.ofMonths().withYears() 行为与...相同 Period.ofYears()这些实例方法令人困惑,因为它们创建了一个新的Period并返回它们,但没有考虑它们被调用的Period的状态.
Period p = Period.ofWeeks(3);
p = p.withDays(2);
Run Code Online (Sandbox Code Playgroud)
似乎合乎逻辑的是,这将返回3周,2天的时间段,但它只返回2天的时间段.这就像我打电话一样Period.ofDays(2).
此外,还有五种其他静态工厂方法,没有类似的实例方法.
那么,这三种实例方法是否存在?如果是这样,用例是什么?