0

このメソッドに渡されて 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 PM" )

someDateString 午前 7:00、午後 10:00

オープン、今、クローズ

テストコードは次のとおりです。

-(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 時から午後 10 時の間です。

4

1 に答える 1

0

日付や日付フォーマッタはまったく必要ありません。文字列処理コードを使用して時刻を読み取り、時間と分の情報を取得できます。次に、比較する現在の日付の日付コンポーネントを取得できます。

于 2013-07-24T23:13:05.267 に答える