如何转换日期和时间对象12小时格式



我从控制器中的客户端获取日期和时间,这里是函数的签名:

public ResponseEntity<Meeting> create(@RequestParam(name = "start") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime start)

如果我打印开始变量,它会以24小时格式显示日期和时间:

2020-12-10T16:52:42.014982500

但是我希望LocalDateTime变量的值是12小时的格式,所以我尝试在函数的签名中更改DateTimeFromat

public ResponseEntity<Meeting> create(@RequestParam(name = "start") @DateTimeFormat(DateTimeFormatter.ofPattern("dd/MM/yyyy hh.mm aa")) LocalDateTime start).3

但在这一行:

DateTimeFormatter.ofPattern("dd/MM/yyyy hh.mm aa")

我得到错误:

Attribute value must be constant

我的问题是,params@DateTimeFormat必须得到什么,才能将客户端的日期和时间转换为12小时格式?

日期-时间对象不存储格式信息。LocalDateTime应该只存储日期和时间成分(即年、月、日、小时、分钟、秒和秒的分数(。当您打印一个LocalDateTime的对象时,您会得到它的toString函数返回的内容。如果您需要不同格式的值,则需要从该对象中获取格式化字符串,但在任何情况下,您都可以将该格式存储到LocalDateTime的实例中。

下面是一个简单的演示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
class Main {
public static void main(String[] args) {
String strDateTime = "2020-12-10T16:52:42.014982500";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/uuuu hh.mm a", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(strDateTime);
System.out.println(ldt);// Prints the value of ldt#toString
// Get a formatted string
String formatted = ldt.format(dtf);
System.out.println(formatted);
}
}

输出:

2020-12-10T16:52:42.014982500
10/12/2020 04.52 PM

更新

从您对另一个答案的评论(现已删除(中,我了解到您的日期-时间字符串是2020-12-08T21:34:18.119+00:00,它具有区域偏移信息(+00:00(,因此,最合适的类型是OffsetDateTime

将注释更改为

public ResponseEntity<Meeting> create(@RequestParam(name = "start") @DateTimeFormat(pattern = DateTimeFormatter.ISO_ZONED_DATE_TIME) OffsetDateTime start)

public ResponseEntity<Meeting> create(@RequestParam(name = "start") @DateTimeFormat(iso = ISO.DATE_TIME) OffsetDateTime start)

查看Spring文档页面以了解有关第二个选项的更多信息。

快速演示:

import java.time.OffsetDateTime;
class Main {
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.parse("2020-12-08T21:34:18.119+00:00");
System.out.println(odt);
}
}

输出:

2020-12-08T21:34:18.119Z

最新更新