2015-01-08 4 views
1

이것은 처음으로 묻습니다. 모든 인터넷에서 설명을 찾을 수 없으므로 여기 있습니다 : x 날짜를 계산하는 간단한 함수를 작성하고 있습니다. 며칠 전에, 나는이 코드를 썼다. 지금까지는 계산 된 과거 날짜가 1 년 후 였지만, 모든 값이 아니라 단지 11 일 전이었다. 나머지는 괜찮았다. you can execute it here캘린더 날짜 문제, 1 년 오류가있는 기간

차이 : -11

2015년 12월 28일

차이 : -12

2014-12- 오늘이 코드를 실행하면 이 출력을해야합니다 27

알다시피, 나는 캘린더에서 날짜로 구문 분석하는 문제 였지만 캘린더에서도 확인했습니다. 값은 완전히 괜찮 았지만 Date로 전송하는 순간 작동하지 않습니다. 수동으로 캐스팅을 시도했지만 함수가 사용되지 않습니다.

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     System.out.println(getDate(-11, "YYYY-MM-dd")); 
     System.out.println(getDate(-12, "YYYY-MM-dd")); 
    } 
    public static String getDate(int offset, String SimpleFormat) { 
     DateFormat dateFormat = new SimpleDateFormat(SimpleFormat); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(new Date()); 
     cal.add(Calendar.DATE, offset); 
     Date todate1 = cal.getTime(); 
     long diff = todate1.getTime()-(new Date()).getTime(); 
     System.out.println("difference:"+diff/ (24 * 60 * 60 * 1000)); 
     String fromdate = dateFormat.format(todate1); 
     return fromdate; 
    } 
}  

나중에 내가 좋은 라이브러리가 Joda-Time이 아주 좋은 빠른라는 발견, 그래서 나는 그것으로 작동하지만 같은 문제를 놀라게하는 코드를 변경했습니다.

DateFormat dateFormat = new SimpleDateFormat(SimpleFormat); 
DateTime today = new DateTime(); 
String fromdate = dateFormat.format(today.plus(Period.days(offset)).toDate()); 

지금까지 나는이 11 일 기간에 350 일을 추가해도 잘못된 날짜가 표시되는지 확인했습니다. 은 내가 Joda 시간 포맷을 사용할 수 있습니다 알고 있지만, 아직도 내가 문제를 정확히 찾을 수없는, 어떤 도움도 좋은 것입니다 :)

(지금이 문제를 가지고 사람을위한) :

DateTimeFormatter fmt = DateTimeFormat.forPattern(SimpleFormat); 

답변

6

문제는 날짜 또는 날짜 시간이 아니라 형식 지정자와 관련이 있습니다.

YYYY은 ISO 주간 연도를 의미합니다. 그러나 연도의 마지막 부분 주일에 대한 ISO Week Year는 is the next year입니다.

yyyy은 실제로 원하는 달력 연도를 의미합니다.

+0

덧붙여서 트위터는 작년 말에 HTTP Date 헤더에서 이와 똑같은 오류를 범했지만 HTTP Expires 헤더는 그렇지 않습니다. – Powerlord

+0

오, 잘 잡으세요. 이것은 매우 좋은 캐치입니다. 나는 그것을 발견하기 전에 내가 얼마나 오래 꼼짝 않고 바라 보았을 지 모르지만, 꽤 오래되었을 것이다. –

+0

@DavidConrad 만약 트위터가 [같은 문제를 가지고 있지 않다면] (http://what.thedailywtf.com/t/twitter-time-warp/6740), 아마도 그것을 확인하지 않았을 것입니다. – Powerlord