2017-01-09 1 views
1

yyyy-'W'ww의 ISO 형식으로 주 번호와 연도가 포함 된 날짜 형식이 필요합니다. 그러나 H2 데이터베이스에서 사용할 수있는 일주일 기능 만 사용하면 일주일에 일주일에 한 번만 사용할 수 있습니다. 기본 연도를 추가하는 방식으로 어떻게 형식을 지정할 수 있습니까? 2016 년과 같은 'W'ww.H2에서 원하는 형식으로 주 번호 서식을 지정하는 방법

현재, 나는 (확실히 올바른 방법이 아니다)이 기능

WEEK (ParseDateTime을 (TRUNC ("+ this.fieldName +"), '2016ww') WEEK (ParseDateTime을을 (사용하고 . TRUNC는 ("+는 this.fieldName +"), '2016-WW'

내가 할 수있는 다른 무엇을 얻을 수 아니다는) 사람이 여기

+0

'this.fieldName'의 데이터 유형과 내용은 정확히 무엇입니까? –

+0

열 이름입니다. '날짜'데이터 유형이 '시간'이라고 가정 해 보겠습니다. – Vishnukk

+0

설명은 댓글이 아닌 질문에 대한 수정 사항으로 게시되어야합니다. –

답변

0

TL 도와 줄 수,

닥터 01 당신이하는 java.sql.Date로 H2에서 Date 유형을 페치 java.time.LocalDate로 변환개

세부

.

LocalDate ld = mySqlDate.toLocalDate(); 

당신이 심문 할 수있는 ISO 8601 주 # 1 올해의 첫 번째 목요일을 포함하고 월요일 일요일을 실행 표준 definition of a week.

int weekNumber = ld.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR) ; 

연도를 추출하십시오.

int year = ld.getYear(); 

표준 ISO 8601 문자열을 조립하십시오.

String output = year + "-W" + String.format("%02d ", weekNumber); 

더 쉬운 방법은 ThreeTen-Extra 프로젝트에서 YearWeek 클래스를 사용하는 것입니다.

String output = YearWeek.from(ld).toString() ; 
1

다른 라이브러리에는 몇 가지 유효한 해결책이 있습니다. 그러나 표준 역 연도 "y"를 사용하는 것이 잘못되었음을 알아야합니다. 대신 은 주중 기일 인 (또는 주 단위로 표시된 연도)을 기호 "Y"(대문자)로 사용해야합니다. 기존 사용

Calendar -stuff :

java.sql.Date sqlDate = new java.sql.Date(2017 - 1900, 0, 1); // 2017-01-01 

LocalDate ld = sqlDate.toLocalDate(); 
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("YYYY-'W'ww", Locale.FRANCE); 
System.out.println(dtf.format(ld)); // 2016-W52 

사이드 참고 :

java.sql.Date sqlDate = new java.sql.Date(2017 - 1900, 0, 1); // 2017-01-01 
GregorianCalendar gcal = new GregorianCalendar(); 
gcal.setFirstDayOfWeek(Calendar.MONDAY); 
gcal.setMinimalDaysInFirstWeek(4); 
gcal.setTime(sqlDate); 
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-'W'ww"); 
System.out.println(sdf.format(gcal.getTime())); // 2016-W52 

예는 자바-8을 사용하여 여기에 프랑스의 로케일을 선택했습니다 ISO-8601에 필요한 정확한 주 구성을 확인하십시오.

을 : 만 재미 있고 당신은 또한 얻을 달력 주와 몇 가지 연산을 할 계획 (같은 plusWeeks(5) 또는 일부 지역화 된 서식이 출력을 얻을 계획) 경우 잉여 가치를 제공 나의 라이브러리 Time4J를 사용


java.sql.Date sqlDate = new java.sql.Date(2017 - 1900, 0, 1); // 2017-01-01 PlainDate value = JDBCAdapter.SQL_DATE.translate(sqlDate); CalendarWeek cw = CalendarWeek.of( value.get(PlainDate.YEAR_OF_WEEKDATE), value.get(Weekmodel.ISO.weekOfYear()) ); System.out.println(cw.toString()); // 2016-W52 
관련 문제