我正在考虑将JSR-310的一小部分添加javax.time.Duration到我们的库中.
这目前完美无缺.
但JSR-310计划集成在Java 8中!在Java 8上执行我们的应用程序时,如果javax.time.Duration标准库中有一个类,并且我们的jar文件附带了相同的类,会发生什么?
其中一个课程会被默默忽略吗?(哪一个?)当Java 8 VM尝试从我们的库加载类时会出现错误吗?
我需要注意哪些兼容性问题?
我正在公司的Java 8中编写新项目.我建议使用Java 8日期时间API,但我的一位同事说新的日期时间API运行缓慢.
这是真的吗?另外,我想从Oracle获得一些官方文档,其中提到您不应该java.util.Date在新项目中使用.
我正在用 JSR310 替换 JodaTime,并且 JodaTime() 的模块工作正常。
我正在尝试在 spring-boot 应用程序中重新配置日期的序列化。
我不能同时保留两者,所以我正在寻找一种将我的日期序列化/反序列化为 ISO 8601 的方法。
我遵循了这里的建议,但这没有帮助:http : //lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/
这是我JacksonConfig.java的objectMapper:
@Configuration
public class JacksonConfig extends RepositoryRestMvcConfiguration {
private static final Logger logger = LoggerFactory.getLogger(JacksonConfig.class);
public static final DateTimeFormatter FORMATTER = ofPattern("dd::MM::yyyy");
@Bean
// Override and Primary due to bug: https://github.com/spring-projects/spring-boot/issues/6529
@Override
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer());
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer());
mapper.registerModule(javaTimeModule); …Run Code Online (Sandbox Code Playgroud) LocalDate在 Java 中有两个类似的方法equals和isEqual.
它们之间有什么区别?
当他们输出不同的结果时?
我尝试使用代码在Kotlin中使用javax.time:
import javax.time.calendar.LocalDate
fun main(args: Array<String>){
println("Today is ${LocalDate.now()}");
}
Run Code Online (Sandbox Code Playgroud)
并得到编译错误:
C:\kotlin-hello-world>kotlinc hello.kt -include-runtime -d hello.jar
hello.kt:1:14: error: unresolved reference: time
import javax.time.calendar.LocalDate
^
Run Code Online (Sandbox Code Playgroud)
而谷歌搜索结果显示,在科特林javax.time不能使用,人们推荐使用ThreeTenBP与ThreeTenABP如果机器人.我的用例是在Kotlin的服务器端使用javax.time类.
但是当我尝试使用TreeTenBP时,我必须导入org.threeten.bp.LocalDate而不是javax.time.calendar.LocalDateTreeTen*不是JSR-310的实现而是后端口.
除了那些backport库之外,还有什么方法可以在Kotlin中使用javax.time吗?如果是这样,如何配置这样的环境或如何编写这样的代码?
我有一个具有字段的模型类:
@JsonDeserialize(using = InstantDeserializer.class)
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private OffsetDateTime offsetDt;
Run Code Online (Sandbox Code Playgroud)
当这个模型的请求发送到服务器时,我的控制器抛出异常:
Caused by: java.lang.IllegalArgumentException:
Class com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer
has no default (no arg) constructor
Run Code Online (Sandbox Code Playgroud)
pom.xml 具有 2.8.11 版本的依赖项:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我知道这是由 @JsonDeserialize 需要无参数构造函数引起的,但是有解决方法吗?非常感谢。
我希望能够在Java中更改1970年到2008年的基本毫秒参考,这样我就可以节省数据库中的空间和唯一的ID.
最好是Joda-Time.
所谓的Java 7版本中即将推出的jsr-310实现了它.
在此链接的"离散时间轴"部分中,它指出毫秒的计数已从1970年改为2008年
http://today.java.net/pub/a/today/2008/09/18/jsr-310-new-java-date-time-api.html
我能看到的唯一其他选项是每次需要查找记录时以数学方式实现它.
例如
DateTime dt = new DateTime();
long now = dt.getMillis();
DateTime dt2 = new DateTime(2008, 1, 1, 0, 0, 0, 0);
long then = dt2.getMillis();
long smallerDate = now - then;
Run Code Online (Sandbox Code Playgroud)
较小的日期将存储在DB中
- 编辑 -
所以我误读了JSR-310,这是不可能的.
有更好的方法来节省空间,然后处理成千上万的请求计算多头的头痛.
我想将长记录为日期,因为我永远不会知道将数据库移动到哪里,也许MySQL => Oracle.
所以我不想要时间戳,我只想要BigInts.
有很多SO问题涉及计算Java中两个日期或两个日期之间的差异.许多答案指出了核心Java Date类的问题,并建议使用Jodatime,但AFAIK,没有任何建议使用jsr310如何做到这一点.
那么,有什么方法可以在jsr310中计算两个日期或两个日期之间的差异吗?
作为参考,以下问题可以解决此问题:
在核心Java中:
在Jodatime:
我有一个Java方法如下:
private static boolean isDateBetweenRange(DataSet obj, MyClass dataSource, ConditionContext context) {
FilterContext fc = dataSource.getData();
LocalDate dateFieldToCheck = obj.getDate(fc.getDateField()).toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate minDate = fc.getMinDateValue();
LocalDate maxDate = fc.getMaxDateValue();
if (minDate == null || maxDate == null) {
minDate = context.getStartDate().toInstant().atZone(ZoneId.systemDefault())
.toLocalDate();
maxDate = context.getEndDate().toInstant().atZone(ZoneId.systemDefault())
.toLocalDate();
}
boolean result = (dateFieldToCheck.isAfter(minDate) || dateFieldToCheck.isEqual(minDate))
&& (dateFieldToCheck.isBefore(maxDate) || dateFieldToCheck.isEqual(maxDate));
return result;
}
Run Code Online (Sandbox Code Playgroud)
我也想做同样的逻辑LocalDateTime.LocalDateTime如果我重载方法,它将是完全相同的代码.
如何使该方法通用,LocalDate并LocalDateTime使用泛型或任何其他机制?
我如何根据我的类型制作context.getXXXDate()... toLocalDate()或toLocalDateTime()使用通用代码?
我正在尝试配置Jackson以ISO 8601格式显示JSR 310瞬间.
@Configuration
class Jackson {
@Bean
static ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules();
objectMapper.disable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS );
return objectMapper;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这不是一个独特的Bean,实际上我只想禁用这一个设置.所以我真的不想创建ObjectMapper,就像在它上面指定一个设置一样.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.EndpointWebMvcHypermediaManagementContextConfiguration$MvcEndpointAdvice': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.fasterxml.jackson.databind.ObjectMapper org.springframework.boot.actuate.autoconfigure.EndpointWebMvcHypermediaManagementContextConfiguration$MvcEndpointAdvice.mapper; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.fasterxml.jackson.databind.ObjectMapper] is defined: expected single matching bean but found …Run Code Online (Sandbox Code Playgroud)