2012-07-25 86 views
0

我想創建一個函數,顯示在一個字符串中的地方的開放時間,其中第一個條目是「例外」,其他(1-7)顯示「日運作:結束時間「日期到開放時間功能顯示錯誤的時間

但顯示錯誤的開放時間!
我要顯示它是在對象中的數據之一:

"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 2012-07-25 09:16:14

回答

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()功能,你期望它不能正常工作,並且日曆仍具有預設的日期和時間值,您可以將它設置爲開始和結束變量。

嘗試使用SimpleDateFormat,像:

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

我也不清楚,但是你的代碼似乎是服用ISO 8601字符串,如 「2000-01-01T10:00:00Z」並將其分配給java.util.Date。我沒有看到你在哪裏實例化一個Date對象。就像Adinia一樣,我猜你在執行的時候(運行時)會得到一個使用當前日期時間實例化的Date。

另外,不需要使用那些String.valueOf調用。爲此使用格式化程序,如the answer by Adinia中所述。

我建議儘可能避免使用java.util.Date &.Calendar類。他們是非常麻煩的。而是使用Joda-Time或Java 8中的新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」對象。