2012-07-25 4 views
0

첫 번째 항목이 "예외"이고 다른 항목 (1-7)이 "day opentime : closetime"인 문자열 배열의 작업 시간을 표시하는 함수를 만들려고합니다. "영업 시간 시작일 함수가 잘못된 시간을 표시합니다

하지만 잘못된 영업 시간이 표시됩니다!
나는 객체에있는 데이터 중 하나를 보여

"created_at": "2012-01-03T13:31:53Z", 
    "updated_at": "2012-03-02T11:08:36Z", 
    "start_timestamp": 1325376000, 
    "exception_nl": "", 
    "exception_en": "", 
    "id": 447, 
    "end": "2012-12-31T00:00:00Z", 
    "enabled": true, 
    "start": "2012-01-01T00:00:00Z", 
    "season_openings": [ 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Monday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3123, 
      "day": "Maandag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     }, 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Tuesday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3124, 
      "day": "Dinsdag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     }, 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Wednesday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3125, 
      "day": "Woensdag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     }, 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Thursday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3126, 
      "day": "Donderdag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     }, 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Friday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3127, 
      "day": "Vrijdag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     }, 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Saturday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3128, 
      "day": "Zaterdag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     }, 
     { 
      "endtime_timestamp": 946749600, 
      "created_at": "2012-01-03T13:31:53Z", 
      "endtime": "2000-01-01T18:00:00Z", 
      "closed": false, 
      "day_en": "Sunday", 
      "updated_at": "2012-03-02T11:08:36Z", 
      "id": 3129, 
      "day": "Zondag", 
      "starttime": "2000-01-01T10:00:00Z", 
      "starttime_timestamp": 946720800 
     } 

할 수 있습니다 꽤 지우면 (이 경우 전체 년)에 openinghours이 유효한지 "시즌"다음 7 객체가 있다고 볼 것을 일을 표시하십시오. 시작 시간과 종료 시간은 필요한 시간입니다. 표준 날짜입니다. 일, 년, 달은 무의미합니다. 그래서 밖으로 작동, 네덜란드 인에 대한

07-25 10:46:17.720: I/openingstijden(31338): Maandag: 21:50 - 21:50 
07-25 10:46:17.720: I/openingstijden(31338): Dinsdag: 21:50 - 21:50 
07-25 10:46:17.720: I/openingstijden(31338): Woensdag: 21:50 - 21:50 
07-25 10:46:17.720: I/openingstijden(31338): Donderdag: 21:50 - 21:50 
07-25 10:46:17.720: I/openingstijden(31338): Vrijdag: 21:50 - 21:50 
07-25 10:46:17.720: I/openingstijden(31338): Zaterdag: 21:50 - 21:50 
07-25 10:46:17.720: I/openingstijden(31338): Zondag: 21:50 - 21:50 
여기

(나는 아직 일을 하위 문자열하지 않았고, 미안 해요,하지만 월요일 ~ 일요일을 의미한다 : 나는이 코드를 실행하면

하지만, 내 출력은 괜찮음)
그러나 모든 시간이 잘못되었습니다. 나는 갑자기 21:50이 어떻게 나타나는지 전혀 모른다. 누구 아이디어? 당신은 당신의 코드에서

public String[] GetOpeningHours(JVenue venue, String language){ 
     Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance 
     String[] oh= new String[8]; 
     Date start,end; 


     JVenueSeasons seizoen = venue.venue_seasons.get(0); // get first, second ALWAYS enabled:false 

     if(language.equals("nld")){ 
     oh[0]=seizoen.exception_nl; //exception eerste string uit array 
     for (int i=0; i<7;i++){ 
      if(seizoen.season_openings.get(i).closed==true){ 
       oh[(i+1)]= "gesloten"; 
      }else{ 
      start=seizoen.season_openings.get(i).starttime; 
      end=seizoen.season_openings.get(i).endtime; 
      calendar.setTime(start); 
      String starttijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE)); 
      calendar.setTime(end); 
      String eindtijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE)); 

      oh[(i+1)]= seizoen.season_openings.get(i).day.substring(0, 2)+ ": " + starttijd +" - "+eindtijd; 
      } 
     } 
     }else{ 
      oh[0]=seizoen.exception_en; //exception eerste string uit array 
      for (int i=0; i<7;i++){ 
       if(seizoen.season_openings.get(i).closed==true){ 
        oh[(i+1)]= "closed"; 
       }else{ 
       start=seizoen.season_openings.get(i).starttime; 
       end=seizoen.season_openings.get(i).endtime; 
       calendar.setTime(start); 
       String starttijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE)); 
       calendar.setTime(end); 
       String eindtijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE)); 
       oh[(i+1)]= seizoen.season_openings.get(i).day_en.substring(0, 2)+ ": " + starttijd +" - "+eindtijd; 
       } 
      } 
     } 
     return oh; 
     } 

} 
+0

결과에서 21시 50 분에 프로그램을 실행하고 있습니다. 당신의 달력 세트가 아마도 작동하지 않는지 확인하십시오. – cosmincalistru

답변

0

: 밑으로 내 코드입니다

calendar.setTime(start); 
String starttijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE)); 
calendar.setTime(end); 
String eindtijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE)); 

내가 아주 잘 모르겠지만, 당신이 그것을 예상대로 작동하지 않는 calendar.setTime() 기능처럼 보인다, 달력에는 아직 시작 날짜와 종료 날짜 값을 설정 한 curent 날짜와 시간 값이 있습니다.

시도가 SimpleDateFormat를 사용하는, 뭔가 같은 :

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); 
String starttijd = timeFormat.format(start); 
String eindtijd = timeFormat.format(end); 
0

나도 잘 모르겠지만, 코드는 "2000-01-01T10 : 00 : 00Z"와 같은 ISO 8601 문자열을 가지고있는 것 같다 그것을 java.util.Date에 할당합니다. Date 객체를 어디에서 인스턴스화하는지 알 수 없다. Adinia처럼, 나는 어떻게 든 당신이 현재 날짜 - 시간 (실행) 순간에 인스턴스화 된 Date를 가지고 있다고 생각하고있다.

또한 String.valueOf 전화를 사용할 필요가 없습니다. the answer by Adinia에서 언급 한 것처럼 포맷터를 사용하십시오.

가능한 경우 언제든지 java.util.Date & .Calendar 클래스를 피하는 것이 좋습니다. 그들은 귀찮게 골칫거리입니다. Java 8의 Joda-Time 또는 새로운 java.time. * 클래스를 사용하십시오.

Joda-Time에서 ISO 8601 문자열을 DateTime의 생성자에 간단히 전달할 수 있습니다.

다음은 Joda-Time 2.3을 사용하는 몇 가지 예제 코드입니다. 암스테르담 표준 시간대를 사용하여 데이터의 날짜 - 시간 값을 조정했습니다. UTC/GMT를 표시하려면 상수 "DateTimeZone.UTC"를 대신 생성자에 전달합니다.

String endtime = "2000-01-01T18:00:00Z"; 
String starttime = "2000-01-01T10:00:00Z"; 

DateTimeZone timeZone = DateTimeZone.forID("Europe/Amsterdam"); // Or: DateTimeZone.UTC 

DateTime end = new DateTime(endtime, timeZone); 
DateTime start = new DateTime(starttime, timeZone); 

DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm"); 

System.out.println("Hours: " + formatter.print( start) + " - " + formatter.print(end)); 

실행

...
Hours: 11:00 - 19:00 


귀하의 데이터가 당신의 진짜 의도는 어떤 일없이 시간의 일을 기록하는 것입니다 제안합니다. 그렇다면 그렇게하십시오. 전체 날짜 - 시간 & 시간대 ("Z")는 날짜 - 시간을 의미하며 장래에 혼동을 줄 수 있습니다. Joda-Time & Java 8은 그 목적을 위해 "LocalTime"객체를 제공합니다.

관련 문제