bootstrap datepicker和LocalDate之间的一天转换

时间:2017-06-26 15:04:35

标签: java json jackson date-parsing bootstrap-timepicker

我有一个表单,我使用字段HashSet<char> valid = new HashSet<char>() { 'y', 'n', 'N', 'Y', }; ... if (valid.Contains(myChar)) { ... } LocalDate映射的表单中接收值。 虽然JSON是:

Jackson

我的Tue Jun 27 2017 00:00:00 GMT+0200 (ora legale Europa occidentale) 变量为LocalDate 这是我的pojo:

2017-06-26

我已经介绍了杰克逊JDK8:

public class BookingForm {
    private Integer building;
    private Integer city;
    private LocalDate date;
    private String description;
    private LocalTime endTime;
    private List<Integer> externalUsers;
    private List<Integer> internalUsers;
    private String name;
    private Room room;
    private LocalTime startTime;
    private List<ExternalUser> newExternalUsers;
    //get and set method

<!-- Jackson dependencies --> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-hibernate5</artifactId> <version>${jacksondatatype.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jdk8</artifactId> <version>${jacksondatatype.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>${jacksonjsr310.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-parameter-names</artifactId> <version>${jacksondatatype.version}</version> </dependency> 代替Date一切正常 时区或其他什么问题?

更新: 这是我的Spring配置:

LocalDate

可以在这里配置吗?

2 个答案:

答案 0 :(得分:0)

我认为你的杰克逊将使用GMT而你的BookingForm可能会使用像BST这样的其他东西来导致这个

答案 1 :(得分:0)

您需要使用反序列化器集添加JavaTimeModule,并且此反序列化器必须具有DateTimeFormatter(以解析输入)。

对于此测试,我创建了一个示例类:

public class JsonLocalDate {
    private LocalDate date;

    // getter/setter
}

然后:

String json = "{ \"date\": \"Tue Jun 27 2017 00:00:00 GMT+0200\" }";

ObjectMapper mapper = new ObjectMapper();
JavaTimeModule module = new JavaTimeModule();
// create formatter for the pattern
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    // append pattern
    .appendPattern("EEE MMM dd yyyy HH:mm:ss 'GMT'Z")
    // create formatter - use English Locale to parse weekday and month name
    .toFormatter(Locale.ENGLISH);
// add the LocalDateDeserializer with the custom formatter
module.addDeserializer(LocalDate.class, new LocalDateDeserializer(formatter));
mapper.registerModule(module);

JsonLocalDate value = mapper.readValue(json, JsonLocalDate.class);
System.out.println(value.getDate());

输出结果为:

  

2017年6月27日