그래서 내가 기여할 것이라고 생각 ... 나는이 오래된 질문은 알고 있지만 나는 또한 ... 꽤 시대를 초월한 적어도, 나는 시간의 공정한 수가 최근에 발견 한 것 같아 내 해결책.
먼저 Grails 2.5.1과 PostgreSQL 9.4를 백엔드로 사용하고 있습니다.
둘째, Groovy/Grails의 날짜 필드는 PostgreSQL에 timestamp without time zone
으로 저장됩니다. 그래서 위의 첫 번째 대답은 실제로는 완전히 정확하지 않은 것처럼 보입니다. 날짜는 UTC로 저장되지 않습니다. 이 관찰은 저를 생각하게 만들었습니다 ... "데이터베이스가 시간대가 무엇인지, 누가 누군지를 모르는 경우"의 라인을 따라 가면됩니까? 마음에 떠오른 첫 번째 대답은 "어쩌면 봄 일 것"이었습니다.
셋째, 내 문제는 내가 BootStrap.groovy
및 new ThisClass().save()
을 통해 데이터베이스에 부트 스트랩 한 날짜가 많다는 것입니다.그리고이 날짜는 날짜 + 시간이 아니기 때문에 모두 2005-11-03 00:00:00
처럼 PostgreSQL 타임 스탬프 (시간대 없음)로 표시됩니다.
넷째, 내 GSP 중 하나를 편집하여 PST (내 서버가있는 곳)로 표시된 날짜 형식 문자열에 시간대를 포함 시켰을 때 실제로 페니 드롭을 만들었습니다. 문제의 필드의 g:formatDate
에 timeZone="Asia/Kolkata"
을 포함 시켰을 때, 시간은 12h30만큼 앞당겨졌습니다. 그래서 꽤 명확하게 내 서버는 PST8PDT에서 실행 중이었고 PostgreSQL이 아니기 때문에 나는 물건을 바꿀 수있는 잠재적 인 장소로 봄으로 돌아왔다.
다섯째, grails-app/conf/spring/resources.groovy
에 로케일 설정에 대한 몇 가지 의견을 읽은 후 나는에 따라,이 로케일 및 시간대 설정을 시도하기로 결정
// Place your Spring DSL code here
beans = {
// from http://stackoverflow.com/questions/1569446/grails-how-to-change-the-current-locale
localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
defaultLocale = new Locale("en","IN")
java.util.Locale.setDefault(defaultLocale)
println "configure spring/resources.groovy defaultLocale $defaultLocale"
defaultTimeZone = TimeZone.getTimeZone("Asia/Kolkata")
java.util.TimeZone.setDefault(defaultTimeZone)
println "configure spring/resources.groovy defaultTimeZone $defaultTimeZone"
}
}
가 나는 또한 내 모든 날짜 필드에 대한 g:format timezone="Asia/Kolkata" format="dd MMM, yyyy a z"
을 사용했다. 그리고 이것은 날짜가 "잘못된 시간대"에 처음 입력 되었더라도 정확한 시간대와 예상 시간 (즉, 입력 된 시간)에 PostgreSQL timestamp
필드의 모든 데이터를 해석하는 것으로 보입니다.
여섯 번째로 g:datePicker
-이 "시간대에 민감한"항목에 대한 게시물을 읽었지만 Spring에서 사용한 표준 시간대와 같이 날짜가 해석된다는 것을 알았습니다. 그래서 제 경우에는 이것이 꼭 필요한 것입니다. . 반대로, 누군가가 로케일에서 날짜를 입력하고 Spring이 서버의 시간대로 그들을 변환하려고한다면, 나는 약간의 추가 노력이 필요할 것입니다.
개인적으로 g:datePicker
을 timeZone
을 매개 변수로 받아 들인 것과 똑같이 사용하면 같은 방식으로 사용합니다. g:formatDate
않습니다.