2011-07-18 5 views
5

저는 Java에 익숙하지 않아서 SimpleDateFormatCalendar을 조금 사용했습니다. 나는 Date-Object를 가지고 있으며 yyyy-MM-dd HH:mm:ss과 같은 GMT datestring을 추출하려고합니다. 나는 독일에 살고 있으며 현재 GMT +0200입니다. 내 날짜 - 개체의 시간은 예를 들어 2011-07-18 13:00:00입니다. 내가 지금 필요로하는 것은 2011-07-18 11:00:00입니다. 내 시간대에 대한 오프셋은 자동으로 계산되어야합니다. GMT 날짜 시간 문자열 변환

나는 이런 식으로 뭔가를 시도했다, 그러나 나는 어딘가 고장이 생각 : 나는 그것을 원할 같은 날짜 열이 반환 된 일부 장치에

private String toGmtString(Date date){ 
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    TimeZone timeZone = TimeZone.getDefault(); 
    Calendar cal = Calendar.getInstance(new SimpleTimeZone(timeZone.getOffset(date.getTime()), "GMT")); 
    sd.setCalendar(cal); 
    return sd.format(date); 
} 

가. 다른 장치에서는 오프셋이 올바르게 계산되지 않고 입력 한 날짜 - 개체에서 날짜와 시간을받습니다. 조언이나 조언을 해줄 수 있습니까? 내 기본 시간대를 얻지 못하는 것 같아요? 새 시간대를 발명하지 않기 때문에

답변

5
private String toGmtString(Date date){ 
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    sd.setTimeZone(TimeZone.getTimeZone("GMT")); 
    return sd.format(date); 
} 

당신은 새로운 SimpleTimeZone를 만들 필요가 없습니다 - 프로그램, GMT에 플레이에 와서이 개 기존 시간대 및 기본 일이있다.

다른 시점을 나타내지 않으므로 기존 날짜 개체를 수정할 필요가 없습니다. 동일한 시점을 다른 방식으로 표시하기를 원합니다.

당신이해야 할 일은 SimpleDateFormat에게 형식 지정에 사용할 시간대를 알려주는 것입니다.

+0

나는 그것이 그렇게 쉽지는 않다는 것을 믿을 수 없지만, 물론 그것을 시도 할 것입니다. 잠시만 기다려주십시오 ... – Marco

+0

Ok .. 테스트되었습니다 .. 나는 '2011-07-18 13 : 34 : 27'을 나타내는 날짜 개체를 사용했습니다. 기본 날짜 함수'.toGMTString()'을 사용하여 필요한 시간의 정확한 시점 인'18 Jul 2011 11:43:27 GMT '를받습니다. 자신의 함수를 사용하여'2011-07-18 13 : 43 : 27'이 내 문제였다. Jigar Joshin의 기능을 사용하면 1 시간 (유럽 서머 타임)이 누락 된'2011-07-18 12 : 43 : 27'을 받게됩니다. Eli Acherkans 기능을 사용하여 정확히 내가 원했던 (2011 년 7 월 11 일 11시 43 분 27 초) (유럽 여름을 포함하여 오프셋). – Marco

+0

+1

2
private String toGmtString(Date date){ 
    //date formatter 
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    //getting default timeZone 
    TimeZone timeZone = TimeZone.getDefault(); 
    //getting current time 
    Calendar cal = Calendar.getInstance() 
    cal.setTime(date) ; 
    //adding/substracting curren't timezone's offset 
    cal.add(Calendar.MILLISECOND, -1 * timeZone.getRawOffset());  
    //formatting and returning string of date 
    return sd.format(cal.getTime()); 
} 
+0

좋습니다. 좋아 보여요. 나는 그것을 몇 분 안에 시도 할 것이다. 하나의 질문. 어디서 어떻게 함수 호출에서 date-parameter를 사용 했습니까? 인스턴스를 가져온 후에'cal.setTime (date);'을 사용해야합니까? – Marco

+0

예. 그것을 업데이트했습니다. –

+0

니스! 공장! 고마워요! – Marco