日期到开放时间功能显示错误的时间
我想创建一个函数,显示在一个字符串中的地方的开放时间,其中第一个条目是“例外”,其他(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;
}
}
在你的代码有:
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);
我也不清楚,但是你的代码似乎是服用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”对象。
从你的结果我得到你在21:50运行程序。检查你的日历集也许它不工作。 – cosmincalistru 2012-07-25 09:16:14