안녕하세요, 저는 "2017-03-24 06:01:33"과 같은 날짜가있는 테이블을 UTC로 가지고 있습니다. 내 자바 프로그램에서 나는 그것을 문자열로 받아 들여야한다. 어떻게 클라이언트의 오프셋 시간과 분을 사용하여 로컬 날짜 문자열로 변환?UTC에서 현지 날짜로 변환
답변
내가 할 것이다 :
OffsetDateTime odt = LocalDateTime.parse(dateFromDb, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"))
.atOffset(ZoneOffset.UTC);
String localDateString = odt.atZoneSameInstant(ZoneOffset.ofHoursMinutes(5, 30))
.toLocalDateTime()
.toString();
을 당신이 시간과 분의 오프셋으로 클라이언트의 시간대를 가지고 가정입니다. 그렇다면 ZoneOffset.ofHoursMinutes()
에서 해당 항목을 전달할 수 있습니다. 클라이언트 시간대에서 일년 중 일부 (예 : 미국 일 경우)의 서머 타임 (일광 절약 시간)을 사용하는 경우 날짜가 떨어지는 시간대의 오프셋을 가져야합니다. . 클라이언트 표준 시간대를 지정하는 다른 방법은 ZoneId.systemDefault()
또는 ZoneId.of("Asia/Kolkata")
입니다. 따라서 서머 타임 규칙을 알고 더 안전 할 수 있습니다.
코드가 인쇄 :
2017-03-24T11:31:33
당신은 예상대로 다섯 시간 반 앞서 입력 문자열의 알 수 있습니다.
시간이 아닌 날짜 만 필요한 경우 toLocalDateTime()
대신 toLocalDate()
을 사용하십시오.
위의 모든 경우에는 Java 8이 필요합니다. 또는 Java 8 날짜 및 시간 클래스의 백엔드를 Java 6 및 7로 변경하는 방법은 ThreeTen Backport을 참조하십시오. Java 8을 사용할 수없고 백 포트를 사용하지 않으려면 this question: Not able to parse UTC date time to EST local time에서 아이디어를 찾으십시오.
V.V 여기서 클라이언트의 오프셋 데이터는 어디에 있습니까? 나는 ZoneOffset.UTC가 서버의 오프셋을 취하기를 희망한다. – Virat
내 편집 내용에 @Sandesha가 설명되어 있습니까? 클라이언트에서 표준 시간대 문자열을 얻고 있습니까, 아니면 어떻게됩니까? –
현지 오프셋 분 및 오프셋 시간을 얻고 있습니다 ... "2017-03-24 06:01:33"UTC는 인도에서 현지 시간으로, 인도의 오프셋 시간은 5, 오프셋 분은 30 또는 미국에서 현지 날짜와 동일한 UTC 날짜를 표시해야하는 경우 USA 오프셋 시간 및 분을 가져옵니다. – Virat
사용이
simpleDateFormat.setTimeZone("Your-Client's-Timezone");
어떻게 사용합니까? UTC String "2017-03-24 06:01:33"과 "yyyy-mm-dd"형식으로 로컬 문자열을 가져 오는 방법은 무엇입니까? @Sandeep – Virat
@Sandesha, Javadocs에서 SimpleDateFormat을 확인 했습니까? –
Asker가 Java 8에서 더 프로그래머에게 친숙한 날짜 및 시간 클래스를 사용할 수있을 때 제 생각에 겸손한 의견으로 'SimpleDateFormat'과 같은 오래된/오래된 클래스를 제안해서는 안됩니다. –
http://stackoverflow.com/questions/31395441/convert-utc-date-to-local-date – soorapadman