출처 : https://stackoverflow.com/questions/47899908/for-spring-boot-2-how-serialize-java8-time-api-to-timestamp-epoch


spring boot 2

mariadb 10.x


json으로 반환하는 서비스를 만들었는데 날짜형을 timestamp를 사용하기로 했다. 

그래서 날짜를 반환하여 앞에 10자리만 잘라서 쓰려고 했는데, 날짜가 하루 모자랐다. 

데이터는 timestamp형의 8/1 인데 클라이언트단으로 데이터를 가져와 출력하면 7/31 15시로 출력이 된다. 


일단 UTC 데이터를 가지고 왔으니 로컬 시간으로 표기해야 할 것 같아 좀 찾아봤다. 

실서버에서 테스트해보지는 못해서 맞는지 확신은 안들지만;


일단 아래와 같이 설정하니 정상 동작하는 것 처럼 보인다.


Pom.xml

<dependency>

    <groupId>com.fasterxml.jackson.datatype</groupId>

    <artifactId>jackson-datatype-jsr310</artifactId>

</dependency>


Application.properties

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS: true

spring.jackson.serialization.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS: false


javascript timestamp to localdate

Number.prototype.padLeft = function(n,str){

    return (this < 0 ? '-' : '') +

            Array(n-String(Math.abs(this)).length+1).join(str||'0') + (Math.abs(this));

}

function TimestampToLocalDate(numberTimestamp) {

    var date = new Date(numberTimestamp);

    if(typeof(date) == "object")

        return date.getFullYear() + "-" + (date.getMonth() + 1).padLeft(2) + '-' + date.getDate().padLeft(2);

    else

        return "";

}


원래 아래 있는 코드였는데, IE에서 pasStart를 지원하지 않아서 수정함


javascript timestamp to localdate

function TimestampToLocalDate(numberTimestamp) {

    var date = new Date(numberTimestamp);

    if(typeof(date) == "object")

        return date.getFullYear() + "-" + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0");

    else

        return "";

}


Posted by motolies
,