2013-04-15 3 views
0

날짜를 "indies time"으로 변환하고 싶습니다. 구체적으로는 "아시아/캘커타"입니다.Java 날짜를 다른 날짜로 변환하십시오.

코드 : 여기

// TODO Auto-generated method stub 
Date date=new Date(); 
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); 

String dateString=simpleDateFormat.format(date); 

System.out.println("Currect Date : " + dateString); 
// This is returning a string and I want a date. 

System.out.println("Wrong Output : "+simpleDateFormat.parse(dateString)); 
//This returns a Date but has incorrect result. 

는 위의 코드의 출력 : 나는 날짜가 아닌 문자열을 원하는

Correct Date : 2013-04-15 15:40:04 
Wrong Output : Mon Apr 15 03:10:04 MST 2013 

,하지만 난 날짜를 검색 할 때, 시간이 3:10입니다, 문자열을 가져 오면 15:40:04이됩니다. 왜 이것들은 같지 않은가?

+0

다른 사람들에게 추가하는 것 ... Date 객체는 특정 시점을 나타내고 ** TZ를 ** 알고있는 SimpleDateFormat 객체를 사용하여 만들었지 만 ** no ** TZ 지식을 포함합니다. 날짜를 문자열 표현으로 변환 할 때마다 어떻게 표시해야하는지 알기 위해서는 TZ를 사용해야합니다. Date는 TZ를 알지 못하기 때문에 암시 적으로'date.toString()'을 호출 할 때 ** default ** TZ를 의미하는 것으로 간주 할 수 밖에 없습니다. Date의'toString()'메소드에 의존하는 대신 TZ를 알고있는 SDF를 사용하여 포맷해야한다. – Blake

답변

1

구문 분석은 그래서 호출하는 DateObject를 반환합니다

System.out.println("Wrong Output : "+simpleDateFormat.parse(dateString)); 

은 다소 비슷하다

Date d1 = simpleDateFormat.parse(dateString); 
System.out.println("Wrong Output : "+d1.toString()); 

당신이 경우, 단지 날짜 객체를 생성하는 문자열을 구문 분석하는 날짜를 파싱 기억 그것을 특정 형식으로 표시하려면 해당 날짜 개체를 사용하고 sdf.format를 호출하십시오. 예 :

String dateStringOut=simpleDateFormat.format(d1); 
System.out.println("Output : "+dateStringOut); 
1

Date에는 서식이 없습니다. 단순히 Date입니다. 따라서 다른 출력 형식간에 Date 개체를 변환 할 수 없습니다. 일단 날짜가 있으면 다른 형식으로 변환 할 필요가 없습니다. 형식을 지정하는 방법은 SimpleDateFormat으로 String으로 변환 할 때 결정됩니다. 따라서 일단 당신이 Date을 파싱했다면 출력을 위해 포맷 할 때까지 계속 보관하십시오.

+0

날짜를 데이터베이스에 저장할 때 indien 시간대에 저장하지 않을 것입니다. –

+0

'dateString'이 이미 올바른 형식을 생성했다면, 그 문제는 무엇입니까? – NilsH

+0

내가 문자열을 반환 할 때 구문 분석하지만 그 문자열은 인도 시간으로 날짜로 변환되지 않습니다. –

0

DateFormat 클래스의 정적 함수 getDateTimeInstance (int dateStyle, int timeStyle)를 사용하십시오. 자세한 내용은 DateFormat 클래스를 참조하십시오. 그것은 당신을 도울 수 있습니다.

+0

이것은 목적을 해결하지 못합니다. –

2

parse()는 날짜 텍스트를 구문 분석하고 Long 값인 Date 객체를 구성합니다. 구문 분석() javadoc에서는

The TimeZone value may be overwritten, depending on the given pattern and 
the time zone value in text. Any TimeZone value that has previously been 
set by a call to setTimeZone may need to be restored for further operations. 

귀하의 구문 분석 날짜 개체가 MST 시간대에 인쇄 한 날짜에 있으며, toString()를 호출하여 인쇄 말한다. MST에서 IST로 변환하면 기대하는 타임 스탬프를 얻게됩니다. 따라서 출력이 정확합니다. 올바른 시간대를 사용하여 긴 Date 값을 형식화하고 인쇄하기 만하면됩니다.

관련 문제