鉴于此实体,我需要发布类型为Contracts的新对象。一世 http://www.springframework.org/tags/form代码表单/ sf。我也有jquery datapicker。我遇到的问题是datapicker返回String而不是Date对象。怎么解析?我认为唯一可行的解决方案是在@Controller类中将datepicker中的日期作为@RequestParam获取,并将其解析为java.util.Date对象。
@Entity
@Table(name = "contract")
public class Contracts {
@Id
@Column(name = "contract_id")
private int contractId;
@Column(name = "date_added")
private Date creationDate;
@Column(name = "date_start")
private Date startDate;
@Column(name = "date_end")
private Date finishDate;
@NotNull
@Column(name = "payment_amount")
private Integer paymentAmount;
@Column(name = "payment_type")
@Enumerated(EnumType.STRING)
private PaymentType paymentType;
private boolean valid;
@ManyToOne
@JoinColumn(name = "system_id")
private Systems system;
这就是' POST'我的Controller类的一部分。
@RequestMapping(value = "/createcontract", method = RequestMethod.POST)
public String createContract(@ModelAttribute("contract") @Valid final Contracts contract, BindingResult results,
@RequestParam("system-id") int systemId) {
if(results.hasErrors())
return "newcontract";
return "redirect:contracts";
另一个问题(因为我标记了postgresql)是否是“好吧”#39;将postgresql中的java.util.Data对象存储为日期,或者我应该将其存储为时区'时间戳'?
答案 0 :(得分:0)
jQuery UI DatePicker提供Date对象
该插件允许您使用getDate method获取Date对象。
Here is a Plunker有一个工作示例。
$(function() {
$('#datePicker').datepicker();
$('#datePicker').on('change', () => {
let date = $('#datePicker').datepicker('getDate');
alert(`Date ${date} is ${date instanceof Date ? 'a Date object' : 'not a Date object'}`);
});
});
日期类型 - JPA到PostgreSQL映射
timestamp with time zone
通常最好在数据库中将日期保留为UTC。这将提供最大的灵活性,因为您可以在任何您想要的区域中表示日期。这转换为使用timestamp with time zone
作为将存储为UTC的类型。这意味着您的日期时间在存储之前会添加区域偏移量以获取UTC。
重要的是,所有日期都表示为UTC而不是特定时区。当这些通过线路发送到您的数据库时,会话需要具有UTC时区。
这意味着时区需要在JVM或JPA提供程序上为UTC(例如:Hibernate)。
正如in this blog所述,您可以通过以下方式设置UTC:
JVM: java -Duser.timezone=UTC -jar blabla.jar
或者
JVM: TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));
或者
Hibernate:(application.properties)spring.jpa.properties.hibernate.jdbc.time_zone = UTC
检查哪个版本适合您。
Date
字段因此,您的字段可以表示为:
@Column(name = "date_added", columnDefinition = "TIMESTAMP WITH TIMEZONE")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
您需要确保Date
对象代表UTC的日期时间。
您可以将Date对象存储在PostgreSQL中:
timestamp
有或没有时区time
有或没有时区date
使用在Date
字段上应用的JPA批注@Temporal
,您可以指定对象的映射方式:
@Temporal(TIMESTAMP)
到时间戳@Temporal(DATE)
至date
@Temporal(TIME)
至time
还可以使用注释timestamp with timezone
来声明您的列为@Column(columnDefinition = "TIMESTAMP WITH TIMEZONE")
。
答案 1 :(得分:0)
import java.sql.Timestamp; 要么 import java.sql.Date; 添加此导入ur pojo。