2016-09-24 8 views
1

특정 시간대가있는 문자열 형식의 datetime이 있지만 서버 백엔드로 보낼 수 있도록 UTC 형식으로 변환 할 수 없습니다. 데이터 베이스. 날짜 및 시간 선택기 후의datetime을 utc 형식으로 변환

문자열 : "30-9-2016 15시 10분 아시아/콜카타"당신은 'currentDate.utc()를 사용할 수 있습니다

답변

0

UTC 형식으로 변환 할 수 필요 형식(). '날짜를 UTC로 변환합니다.

1

joda http://www.joda.org/joda-time/을 사용해보세요. 에서

이 조각 결과 "2016-09-30T09 : 40 : 00.000Z"

public String convert(String timeStamp) { 
    DateTimeFormatter fmt = DateTimeFormat.forPattern("d-M-yyyy HH:mm ZZZ"); 
    DateTime dt = fmt.parseDateTime(timeStamp); 
    return dt.toInstant().toString(); 
} 
+0

GMT 직원도 처리해야합니다. –

+0

무엇을 의미합니까? – sven4all

+0

Joda-Time은 "Asia/Kolkata"와 같은 식별자를 구문 분석 할 수 없습니다. –

0

SimpleDateFormat는 "아시아/콜카타"와 같은 시간대 식별자를 분석 할 수있는 옵션이 부족한 것 같다 클래스 (어느 영역 이름이나 오프셋). 이 종류의 tz 정보를 정확히 나타내는 패턴 기호 VV는 없습니다.

당신이 SimpleDateFormat를 사용하여 주장하는 경우에 당신은 같은 문자열 전처리를 사용하여이 제한을 우회 할 수 :

input = input.replace("Asia/Kolkata", "GMT+05:30"); 
// and then use pattern symbol "z" or "Z" 

주요 단점은 : 당신은 당신의 입력에 사용되는 콘크리트 TZ 식별자에 대한 고정 배선 가정을.

그러나 패턴 기호 "VV"를 사용하여 "Asia/Kolkata"또는 이와 유사한 식별자를 구문 분석 할 수있는 다른 라이브러리가 3 개 이상 있습니다.

a) ThreetenABP -

Joda-Time-Android

C sven4all @의 답변을 자바 8

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-yyyy HH:mm VV"); 
Instant instant = ZonedDateTime.parse(input, dtf).toInstant(); 
java.util.Date jud = new java.util.Date(instant.toEpochMilli()); 

b)에 java.time 패키지의 백 포트의 로이드 적응) 내 라이브러리 Time4A

ChronoFormatter<Moment> f = 
    ChronoFormatter.ofMomentPattern(
    "d-M-yyyy HH:mm VV", PatternType.CLDR, Locale.ROOT, ZonalOffset.UTC); 
Moment moment = f.parse(input); 
java.util.Date jud = TemporalType.JAVA_UTIL_DATE.from(moment); 

데이터베이스에 저장하려면 java.sql.Timestamp과 같이 다른 변환이 필요할 수 있습니다.

관련 문제