2017-03-02 9 views
0

HTML 양식에서 수집 한 날짜를 처리하는 데 미친 일이 있습니다. 저는 Spring 4를 백엔드 용으로, Mongodb 용으로 지속성을 사용하고 있습니다.HTML에서 수집 한 날짜와 MongoDB에 저장 한 날짜 처리 방법

내 문제는 Mongo에 날짜가 표시되는 방식입니다. 나는 다음 형식을 원합니다. dd-MM-yyyy. Mongo는 기본적으로 ISO 형식 (yyyy-MM-dd'T'HH : mm : ssZ)을 사용하지만, 새 문서를 삽입하려고 할 때 양식을 채운 후에 날짜가 숫자로 저장된다는 것을 이해합니다. 가치가 있으므로 내 질문은 다음과 같습니다.

  1. 왜 이런 일이 발생합니까?
  2. 날짜 형식의 dateOfBirth를 유지하면서 dd-MM-yyyy 형식으로 날짜를 저장할 수 있습니까?
  3. 그렇지 않은 경우 어떻게 날짜를 표준 ISO 형식으로 만들 수 있습니까?

고객 등급이다

<div class="form"> 
    <h2>Registration</h2> 
    <form th:action="@{/registration}" method="POST" 
     th:object="${customer}"> 
     <input type="text" placeholder="Nome" name="firstName" 
      th:field="*{firstName}" /> <input type="text" placeholder="Cognome" 
      name="lastName" th:field="*{lastName}" /> <input type="date" 
      name="dateOfBirth" th:field="*{dateOfBirth}" /> <input type="text" 
      placeholder="Username" name="username" th:field="*{username}" /> <input 
      type="email" placeholder="Email" name="email" th:field="*{email}" /> 
     <input type="password" placeholder="Password" name="password" 
      th:field="*{password}" /> 
     <button type="submit">Submit</button> 
    </form> 
</div> 

제어기

@Document 
public class Customer implements UserDetails { 
    private static final long serialVersionUID = 1L; 
    private String firstName; 
    private String lastName; 
    private Date dateOfBirth; 
    private String username; 
    private String email; 
    private String password; 
    private String role; 

    public Customer() { } 

    public Customer(String firstName, String lastName, Date dateOfBirth, String username, 
      String email, String password, String role) { 
     super(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.dateOfBirth = dateOfBirth; 
     this.username = username; 
     this.email = email; 
     this.password = password; 
     this.role = role; 
    } 

    //getters, setters, etc. 

    public Date getDateOfBirth() { 
     return this.dateOfBirth; 
    } 

    public void setDateOfBirth(String dateOfBirth) { 
     try { 
      this.dateOfBirth = new SimpleDateFormat("dd-MM-yyyy").parse(dateOfBirth); 
     } 
     catch (ParseException e) { 
      //... 
     } 
    } 
} 

registration.html (I의 형태로 바인더 제본 날짜를 파싱하기 위해 설정 메소드 변경) "/ registration"값은 DAO를 사용하여 새 고객을 삽입합니다.

MongoDB result

조언에 감사 :

은 결과입니다.

답변

1

내가 본 것처럼 문제는 없지만 약간의 설명이 필요합니다.

왜 이런 일이 발생합니까?

표시되는 값은 여전히 ​​날짜이며, 사용중인 뷰어에서 동등한 것으로 표시됩니다.

Mongo 셸을 통해 동일한 문서를 확인하면 ISO 형식으로 날짜가 표시되지만 내부적으로 긴 값으로 저장됩니다.

날짜 유형의 생년월일 (DateOfBirth) 을 유지 DD-MM-YYYY 형식으로 날짜를 저장할 수 있습니까?

dd-MM-yyyy은 날짜 형식이며이를 저장하려면 날짜 형식을 문자열로 변경해야합니다. 권장하지 않습니다.

그렇지 않으면 어떻게 표준 날짜 형식을 사용할 수 있습니까?

어떤 형식 으로든 날짜를 저장하지 마십시오. 내부 표현은 긴 값입니다. 첫 번째 요점은 형식 부분에 대해 대답해야합니다.

+0

내 의심을 해결해 주셔서 감사합니다! – andy

+0

DB에 저장된 날짜 값을보기로 표시하려고했으나 일, 월, 연도가 일치하지 않습니다.예를 들어 내가 19 06 1990을 삽입하면 표시된 값은 Fri Nov 10 00:00:00 CET 24입니다. 어디에서 잘못 되었습니까? – andy

+0

어디서 잘못 될지 잘 모르겠습니다. 우선 db로 올바른 값을 보시겠습니까? – Veeram