2012-03-26 2 views
0

단순히 "Thu"또는 "Thursday"와 같은 문자열을 감안할 때, java.util.Calendar 객체를 얻으려면 어떻게해야합니까? 여기서 String은 가장 가까운 String을 나타냅니다. 즉, 오늘은 월요일, 3/26/29012이므로 String이 "Thu"이면 "3/29/2012"를 나타내는 날짜를 만들고 싶습니다. 전달 된 String이 "Mon"이고 우리가 월요일에 있다면, 나는 오늘 날짜를 원할 것입니다. 이 예에서는 '2013 년 3 월 26 일'입니다. 요일 이름 만있는 날짜를 어떻게 파싱합니까?

나는이 시도

...

  final DateFormat formatter = new SimpleDateFormat("EEE"); 
      java.util.Date date = (Date) formatter.parse(dayOfWeekStr); 
      final Calendar now = Calendar.getInstance(); 
      dateCal.set(Calendar.YEAR, now.get(Calendar.YEAR)); 
      dateCal.set(Calendar.MONTH, now.get(Calendar.MONTH)); 
      dateCal.setTime(date); 

하지만이 작동하지 않습니다. 날짜를 설정하면 년과 월 결과가 1970 년 1 월이됩니다.

+0

코드에 dateCal이라는 변수가 없습니다. – jahroy

+0

가장 가까운 미래 날짜를 원해요. – biziclop

답변

0

나는 사람이 더 간결 솔루션이있는 경우, 내가 대신 받아 들일 것이다

public static Calendar getNearestDateFromDayString(final String dayOfWeekStr, 
     final Calendar startingDay) throws ParseException { 
    final DateFormat formatter = new SimpleDateFormat("EEE"); 
    final java.util.Date date = (Date) formatter.parse(dayOfWeekStr); 
    final Calendar result = Calendar.getInstance(); 
    result.setTime(date); 
    result.set(Calendar.YEAR, startingDay.get(Calendar.YEAR)); 
    result.set(Calendar.MONTH, startingDay.get(Calendar.MONTH)); 
    result.set(Calendar.HOUR, startingDay.get(Calendar.HOUR)); 
    result.set(Calendar.MINUTE, startingDay.get(Calendar.MINUTE)); 
    result.set(Calendar.SECOND, 0); 
    java.util.Date today = new java.util.Date(); 
    while (result.getTimeInMillis() <= today.getTime()) { 
     result.add(Calendar.DATE, 7); 
    } // while 
    return result; 
} // getNearestDateFromDayString 

로가는 끝났다.

2

거의 다 왔어. 나머지 부분의 꼭대기에 .setTime(..)을 넣으십시오. 현재 시간을 설정하여 YEAR 및 MONTH 변경 사항을 무시하고 있습니다.

Kevin이 지적했듯이 모든 경우에 작동하지 않을 수 있습니다. 그런 이유로 다른 접근법을 사용하는 것이 좋습니다. 구문 분석 된 날짜를 기준으로 달력에서 DAY_OF_WEEK 만 가져 와서 now으로 설정하십시오. 물론 필요한 경우 주를 바꾸어야합니다.

+1

나는 또한 당신이 그 달의 주를 필요로한다고 믿습니다. 또한 원하는 반올림 구성표에 대한 논리를 작성해야합니다 (위쪽, 아래쪽 [기본값], 가장 가까운 위치). – kevingallagher

+0

안녕하세요 Bozho, 그건 작동하지 않습니다. setTime을 맨 위로 이동 시키면 현재 연도의 첫 번째 금요일을 설정할 수 있습니다 (입력 문자열이 "금"인 경우). 내가 원하는 것은 다가오는 금요일입니다. 오늘이 오늘과 같으면 오늘입니다. – Dave

+0

Kevin의 제안에 따라 몇 가지 더 많은 계산을해야합니다. WEEK도 설정하십시오. – Bozho

관련 문제