SpringBoot:時區差8小時問題


在編寫代碼過程中,遇到一個問題,在服務器上寫入時間為:2021-09-22 08:00:00,但在本機測試寫入的時間為:2021-09-22 00:00:00

首先是懷疑服務器上的時間不正確,但經驗證后發現不是:

$ date

# Output:Thu Sep 23 10:40:09 CST 2021  // 顯示的是當前時間
# 以下是解決辦法:
$ yum install ntpdate -y
$ ntpdate 0.asia.pool.ntp.org

其次懷疑服務器連接參數serverTimezone寫錯了,但實際上沒有寫錯:

serverTimezone=GMT%2B8

查詢資料過程中,發現了一個易錯的地方,即前端取時間可能會少了8小時,通過以下代碼解決:

spring:
    #解決前端取回日期少8個小時問題
    jackson:
        date-format: yyyy/MM/dd HH:mm:ss
        time-zone: GMT+8

然后,通過設置Java程序的時區解決了問題,在SpringBoot啟動類中添加設置時區的方法:

@SpringBootApplication
public class Application {
    @PostConstruct
    void init() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    }
    public static void main(String[] args) {
        SpringApplication.run(MallApplication.class, args);
    }
}

最后,在查找具體原因的時候發現,由於代碼是部署在Docker容器中,而Docker容器中的時區是不正確的,如:

$ date
# Output:Thu Sep 23 03:13:55 UTC 2021  // 使用了UTC的時間

由於不想在容器中同步時間,所以使用設置Java程序的時區即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM