이것은 처음으로 묻습니다. 모든 인터넷에서 설명을 찾을 수 없으므로 여기 있습니다 : 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);
덧붙여서 트위터는 작년 말에 HTTP Date 헤더에서 이와 똑같은 오류를 범했지만 HTTP Expires 헤더는 그렇지 않습니다. – Powerlord
오, 잘 잡으세요. 이것은 매우 좋은 캐치입니다. 나는 그것을 발견하기 전에 내가 얼마나 오래 꼼짝 않고 바라 보았을 지 모르지만, 꽤 오래되었을 것이다. –
@DavidConrad 만약 트위터가 [같은 문제를 가지고 있지 않다면] (http://what.thedailywtf.com/t/twitter-time-warp/6740), 아마도 그것을 확인하지 않았을 것입니다. – Powerlord