标签: java-time

如何让JAX-RS将Java 8 LocalDateTime属性作为JavaScript样式的日期字符串返回?

我使用JAX-RS方法注释创建了一个RESTful Web服务:

@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public MyThing test()
{
    MyThing myObject = new MyThing(LocalDateTime.now());
    return myObject;
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我想调整一件事:如果返回的Java对象包含新Java 8 LocalDateTime类型的属性,则表示为JSON对象:

{"myDateTimeProperty":{"hour":14,"minute":32,"second":39,"year":2014,"month":"NOVEMBER","dayOfMonth":6,"dayOfWeek":"THURSDAY","dayOfYear":310,"monthValue":11,"nano":0,"chronology":{"calendarType":"iso8601","id":"ISO"}},...}
Run Code Online (Sandbox Code Playgroud)

如何告诉JAX-RS返回一个JavaScript Date.toJSON() - 样式字符串

{"myDateTimeProperty":"2014-11-07T15:06:36.545Z",...}
Run Code Online (Sandbox Code Playgroud)

代替?

java json jax-rs java-8 java-time

9
推荐指数
2
解决办法
9250
查看次数

是否可以使用TextStyle.SHORT和TextStyle.FULL解析月份的日期?

DateTimeFormatter从类似模式创建的Java 8 d. MMM u只能用TextStyle.SHORT定义的样式解析日期(例如13. Feb 2015),从中创建的DateTimeFormatter d. MMMM u只能用TextStyle.FULL定义的样式解析日期(例如13. February 2015).

在"旧的"SimpleDateFormat中,"MMM"和"MMMM"之间的区别仅对格式化很重要,而不是解析,因此很容易创建一个理解月份名称的FULL和SHORT形式的解析器.

是否可以创建一个也可以执行此操作的Java 8 DateTimeFormatter?或者我是否总是要创建两个解析器,一个使用FULL,另一个使用SHORT模式?

java parsing date java-8 java-time

9
推荐指数
1
解决办法
214
查看次数

解析ISO_INSTANT和类似的日期时间字符串

我昨天创造了这个精彩的静态方法,它工作得很好 - 昨天

但是,今天它给了我这个错误.我想这是从Z之前的太多0.

任何人都可以推荐如何以简洁的方式(Java 8)解析这种类型的String格式日期 - 请记住它昨天ISO_INSTANT也有效,所以也是一种有效的格式String?

Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1443451604, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
at java.time.LocalDate.from(LocalDate.java:368)
at java.time.LocalDateTime.from(LocalDateTime.java:456)
... 9 more
Run Code Online (Sandbox Code Playgroud)

在输入时间抛出异常:"2015-09-28T14:46:44.000000Z"

/**
 *
 * @param time the time in RFC3339 format (e.g. "2013-07-03T14:30:38Z" )
 * @return
 */
public static LocalDateTime parseTimeINSTANT(String time) {
    DateTimeFormatter f = DateTimeFormatter.ISO_INSTANT;
    return LocalDateTime.from(f.parse(time));
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

java datetime java-8 java-time

9
推荐指数
3
解决办法
7751
查看次数

Java 8偏移日期解析

我需要将以下格式的String解析为2015-01-15-05:00UTC中的LocalDate(或其他).问题是以下代码:

System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));
Run Code Online (Sandbox Code Playgroud)

输出2015-01-15忽略偏移量.期望的输出是2015-01-16

提前致谢!

java timezone-offset java-8 java-time

9
推荐指数
1
解决办法
3558
查看次数

在java.time.LocalTime之间(第二天)

请建议是否有API支持来确定我的时间是在两个LocalTime实例之间,还是建议采用不同的方法.

我有这个实体:

 class Place {
   LocalTime startDay;
   LocalTime endDay;
 }
Run Code Online (Sandbox Code Playgroud)

它存储工作日的开始和结束时间,即从'9:00'到'17:00',或者从'22:00'到'5:00'的夜总会.

我需要实现一个Place.isOpen()方法来确定该地点是否在给定时间打开.

这里简单isBefore/ isAfter不起作用,因为我们还需要确定结束时间是否在第二天.

当然,我们可以比较开始和结束时间并做出决定,但我想要一些没有额外逻辑的东西,只需要一个简单的between()调用.如果LocalTime不足以达到此目的,请另外建议.

java localtime java-8 java-time

9
推荐指数
1
解决办法
2281
查看次数

为什么没有时间包含在Java的Period类中?

在Joda-Time库中,Period该类表示一段时间,包括年,月,日,小时,分钟等.

但是,在Java Time API中,Period类只能包含若干年,月和日.

为什么我不能在Java的Period对象中包含时间,那么什么是表达"2天1小时"之类的东西的最佳方式呢?

我知道Duration班级,但不允许指定"2天1小时"; 49小时的持续时间可能与"2天1小时"(DST,......)不同.

java jodatime java-time

9
推荐指数
0
解决办法
102
查看次数

错误java.time.format.DateTimeParseException:无法解析,在索引10处找到未解析的文本

我试图使用LocalDateTime来设置下一个String,但我总是得到de unparsed text found错误:

Error java.time.format.DateTimeParseException: Text '2016-08-18 14:27:15.103+02' could not be parsed, unparsed text found at index 10
Run Code Online (Sandbox Code Playgroud)

这是我的字符串:convertDate:' 2016-08-18 14:27:15.103 + 02 '

我的代码:

public static LocalDate conversorStringToLocalDateTime(String convertDate) throws ParseException {
    LocalDate dateTime =LocalDate.parse(convertDate);
    return dateTime;
}
Run Code Online (Sandbox Code Playgroud)

我猜不是太复杂,买我不能看到错误.字符串中的+02可能是原因吗?

date parse-error java-8 java-time localdate

9
推荐指数
2
解决办法
2万
查看次数

Java 8的datetime包DayOfWeek枚举顺序

我正在查看Java 8的新日期时间包的教程.在关于DayOfWeek和Month枚举的页面上,它表示DayOfMonth枚举从星期一到星期日.这是为什么?我使用的每个其他系统(包括.NET)都在周日开始.

java datetime library-design dayofweek java-time

9
推荐指数
2
解决办法
273
查看次数

如何使用Java 8时间API将两位数年份转换为全年

我希望从我的项目中删除Joda-Time库.

我想把两位数转换成全年.Joda-Time的以下代码可以实现此目的.以下是joda-time的以下代码

DateTimeFormatter TWO_YEAR_FORMATTER = DateTimeFormat.forPattern("yy");
int year = LocalDate.parse("99"", TWO_YEAR_FORMATTER).getYear();
System.out.println(year);
Run Code Online (Sandbox Code Playgroud)

产出:1999年

这是我期望的输出,这在我的情况下是有意义的.但是,当我使用java.time API尝试相同的过程时,它会生成DatetimeParseException.以下是java.time API的以下代码:

DateTimeFormatter TWO_YEAR_FORMATTER = DateTimeFormatter.ofPattern("yy");
int year = LocalDate.parse("99", TWO_YEAR_FORMATTER).getYear();
System.out.println(year);
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

Exception in thread "main" java.time.format.DateTimeParseException: Text '99' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2099},ISO of type java.time.format.Parsed
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2017)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952)
    at java.base/java.time.LocalDate.parse(LocalDate.java:428)
    at scratch.main(scratch.java:10)
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {Year=2099},ISO of type java.time.format.Parsed
    at java.base/java.time.LocalDate.from(LocalDate.java:396)
    at java.base/java.time.format.Parsed.query(Parsed.java:235)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
    ... 2 more
Run Code Online (Sandbox Code Playgroud)

我没能看到堆栈跟踪的原因.如果有人可以帮助我理解以下场景并且还解释如何使用Java 8时间API将两位数年份转换为全年,那将是很好的.

java 2-digit-year jodatime java-time

9
推荐指数
3
解决办法
1184
查看次数

为什么java.time.Period#normalized()无法将天标准化?

在Java类中,java.time.Period该方法normalized()的Javadoc中包含以下内容:

这将使年和月单位标准化,而使天单位保持不变。

超类的方法在其Javadoc中具有以下内容:

规范化过程特定于每个日历系统。例如,在ISO日历系统中,年和月被标准化,而天未被标准化,[...]

我无权访问ISO 8601-1:2019的实际文本,也不想在上面花费数百个[在此处插入货币](我想标准化可能在第1部分中描述:基本规则而不是在第2部分:扩展中)。

有人可以阐明为什么Period#normalized()不使天数正常化吗?它是否真的直接来自ISO 8601本身,是在其他地方指定的,还是仅特定于Java实现的?

java datetime iso8601 period java-time

9
推荐指数
1
解决办法
157
查看次数