【发布时间】:2013-07-24 22:35:17
【问题描述】:
我有这个字符串被传递给这个方法以产生 2 次:
周一至周五上午 7:00 至晚上 10:00
-(void)dealWithTimeStrings2:(NSString*)timeString{
NSString *s = timeString;
NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
int idx = [s rangeOfCharacterFromSet:digits].location;
NSString *timeStr = [s substringFromIndex:idx];
NSArray *timeStringsArray2 = [timeStr componentsSeparatedByString:@" - "];
NSLog(@"timeStringsArray2 %@", timeStringsArray2);
//NOW TURN INTO DATE AND FORMAT TO 24HR
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm a"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CST"]];
NSString *openDateString = (NSString*)[timeStringsArray2 objectAtIndex:0];
NSString *closeDateString = (NSString*)[timeStringsArray2 objectAtIndex:1];
NSLog(@"someDateString %@,%@", openDateString,closeDateString);
NSDate *openDate = [dateFormatter dateFromString:openDateString];
NSDate *closeDate = [dateFormatter dateFromString:closeDateString];
NSLog(@"open, now, close %@,%@,%@", openDate,[NSDate date],closeDate);
}
这会产生:
timeStringsArray2 ( “7:00 AM”, “晚上 10:00”)
someDateString 上午 7:00,晚上 10:00
开,现在,关 2000-01-01 13:00:00 +0000,2013-07-24 23:51:55 +0000,2000-01-02 04:00:00 +0000
这里是测试代码:
-(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2{
NSDate *now = [NSDate date];
BOOL inBetween = ([now compare:date1] == NSOrderedDescending && [now compare:date2] == NSOrderedAscending);
return inBetween;
}
如您所见,23:46 不在 6:00 和 18:00 之间。但是,我只是在我的时间 5:46 运行此程序,即在上午 7:00 到晚上 10:00 之间。
【问题讨论】:
-
像
7:30 AM这样的字符串与HH:mm的格式不匹配。你需要hh:mm a。 -
好吧,我做到了,但有人告诉我这导致了转换时区的问题。因为从上午 7:00 和晚上 10:00 我得到 2000-01-01 00:00:00 +0000 和 2000-01-01 12:00:00 +0000 这是不正确的!
-
NSDate对象始终采用 UTC,当您记录它们时,您会看到它们采用 UTC,而不是语言环境时间。 -
谁告诉你关于时区的事情并不知道他们的axx是从地上的一个洞里得到的。事实是您没有“时区问题”,您有“时区理解问题”。 NSDate 总是包含 GMT 时间,NSLog 会打印那个 GMT 时间。
-
糟糕——我的意思是“本地时间”,而不是“本地时间”。后者没有多大意义。
标签: ios nsdateformatter