2012-11-14 5 views
0

타임 스탬프와 함께 날짜가 포함 된 데이터베이스에서 날짜를 얻습니다. UI에 날짜가 모두 &이지만 시간 만 표시됩니다 (yyyy- MM-dd). 나는 변화를했지만, 나는 그것을 올바르게 설정할 수는 없다.날짜 문자열을 자바에서 설정하는 방법

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String startDate = dateFormat.format(dataObj.getReportStartDate()); 
//The above startDate will be of the format : 2012-11-08 

String 형식의 startDate를 Date 데이터 형식으로 설정하려고합니다.

dataIndexObj.setReportStartDate(startDate); 
// Here the setReportStartDate is of the type date(), I cannot change its type to string. 

구문 분석 (시작일)도 시도했습니다. 작동하지 않았습니다. 어떤 생각을하는 방법?

+1

"작동하지 않았다"는 의미는 무엇입니까? 컴파일 오류가 있습니까? 런타임에 예외가 발생 했습니까? 예기치 않은 것을 수행합니까? –

+0

문자열을 날짜로 변환 할 수 없다는 오류가 발생합니다. mm-dd-yyyy 형식을 데이터 형식이 Date 인 변수로 다시 설정하려고합니다. – madhu

+1

java.util.Date를 형식화 된 String으로 변형 할 수는 있지만 Date 객체에 내부적으로 형식을 지정하는 방법을 알릴 수는 없습니다. –

답변

3

데이터를 이미 Date - 원래 서식을 지정한 값으로 설정했기 때문에 사용자의 질문이 분명하지 않습니다. 당신이 String로 다시는 UI에서 데이터 를 받고, 그 변환해야됩니다 것을 의미하는 경우

, 당신은 단지 format 대신 parse를 사용해야합니다 :

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 
// TODO: Set the time zone as well... 

Date date = dateFormat.parse(text); 
0

어쩌면이 당신이 의미하는 바입니다 :

당신의 db에 2 열을 만드십시오. 먼저 문자열의 유형과 다른 날짜. 문자열 유형이 필요할 때 문자열 유형의 열을 호출하면

0

java.util.Datejava.sql.Date을 혼동하지 마십시오. 첫 번째 이름은 부적절하며 날짜는 입니다. 두 번째는 클래스의 첫 번째 클래스에서 하위 클래스로 확장 된 나쁜 해킹이며 실제로는 00:00:00 UTC로 설정된 시간을 보유하고있는 날짜 만 보유하는 것으로 가장합니다. 번거롭고 잘못 설계된 오래된 수업은 피하십시오. 그것들은 이제 유산이며, java.time 클래스로 대체되었습니다.

LocalDate

LocalDate 클래스는 시간이 하루의 시간 영역없이없이 날짜 만 값을 나타냅니다.

이러한 개체를 사용하려면 java.util.Date 개체를 이전 날짜/시간 클래스에 추가 된 새 메서드를 호출하여 변환하십시오. 도중에 Instant이 필요합니다. Instant 클래스는 nanoseconds의 해상도로 UTC의 타임 라인에있는 순간을 나타냅니다.

Instant instant = myUtilDate.toInstant(); 

아마도 당신은 당신의 데이터베이스에서 java.sql.Timestamp 개체가 있습니다.

Instant instant = myTimestamp.toInstant(); 

시간대를 지정하십시오. 특정 시간에 대해 날짜가 지구에 따라 지역마다 다르므로 시간대가 중요합니다.

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = instant.atZone(z); 

LocalDate 개체를 추출합니다.

LocalDate ld = zdt.toLocalDate(); // A date-only value, truncating time-of-day and forgetting time zone. 

원하는 형식으로 문자열을 생성하려면 toString을 호출하기 만하면됩니다. 이 형식은 표준 ISO 8601 형식입니다. java.time 클래스는 날짜 - 시간 값의 문자열 표현을 구문 분석/생성 할 때 기본적으로 ISO 8601 형식을 사용합니다.

String output = ld.toString(); 

다른 방향으로 가고 있습니다.

LocalDate ld = LocalDate.parse("2012-11-08"); 
관련 문제