-2

私は2本の弦を持っています。

NSString *dateof = @"Mon May 21";
NSString *timeof = @"01.00 pm from 11.50 pm"; // 01.00 pm is the start time and 11.50 pm is the end time

NSDateになるように、これらを s として形式で保存する必要があります2012-05-21 13:00:00 +0000

これまでの私のアプローチは次のとおりです。

NSDate *currentTime        = [NSDate date];
NSCalendar *cal            = [NSCalendar currentCalendar];
NSDateComponents 
*currentDateComps = [cal components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
                           fromDate:currentTime];

NSString *startDateStringWithYear = [NSString stringWithFormat:@"%@ %d", startDateString, currentDateComps.year];
NSString *endDateStringWithYear   = [NSString stringWithFormat:@"%@ %d", endDateString, currentDateComps.year];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE MM dd yyyy"];

[formatter setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *startDate = [formatter dateFromString:startDateStringWithYear];

NSArray *timeDurationStringWords = [timeof componentsSeparatedByString:@" "];

// Calculate NSDate's for the start time for today:
NSString *startTimeString = [timeDurationStringWords objectAtIndex:0];
currentDateComps.hour     = [[startTimeString substringToIndex:2] intValue];
currentDateComps.minute   = [[startTimeString substringFromIndex:3] intValue];
if ([[timeDurationStringWords objectAtIndex:1] isEqualToString:@"pm"]) 
{
    currentDateComps.hour += 12;
}
NSDate *startTime         = [cal dateFromComponents:currentDateComps];

コードをデバッグすると、どちらが間違っているかがstartTime表示されます2012-05-29 07:30:00 +0000(日付と時刻の両方が正しくありません)。これはGMT時間のせいだと思います。

日付と時刻が必要2012-05-21 13:00:00 +0000です。

4

2 に答える 2

0

これでできます。ローカル/GMT に関する限り、これはローカル時間を含む NSDate を提供しますが、デバッガーは常に GMT で表示します。NSDateFormatterユーザーに表示する場合は、(を使用して)必要な形式にフォーマットする必要があります。この場合、ローカル時間になります。

NSString *dateof = @"Mon May 21";
NSString *timeof = @"01.00 pm from 11.50 pm";
NSDate   *today  = [NSDate date];

// Start time will be array index 0, end time will be index 1:
NSArray  *times  = [timeof componentsSeparatedByString:@" from "];

NSCalendar *cal  = [NSCalendar currentCalendar];
NSDateComponents *yearComp = [cal components:NSYearCalendarUnit fromDate:today];

// Append the year and the time to the dateof string to get a string like @"Mon May 21 2012 01.00 pm":
NSString *start  = [dateof stringByAppendingFormat:@" %d %@", yearComp.year, [times objectAtIndex:0]];
NSString *end    = [dateof stringByAppendingFormat:@" %d %@", yearComp.year, [times objectAtIndex:1]];

// Make a date formatter that recognizes the above date/time:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE MMM dd yyyy hh.mm a"];

// Convert the strings to dates:
NSDate *startDate = [formatter dateFromString:start];
NSDate *endDate   = [formatter dateFromString:end];
于 2012-05-30T02:39:58.447 に答える
0
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];
NSString *str = [formatter stringFromDate:[NSDate date]];
NSLog(@"str=%@",str);
NSDate *dt = [NSDate date];
dt = [formatter dateFromString:str];
NSLog(@"dt=%@",dt);

出力:

str=2012-05-29 10:36

dt=2012-05-29 05:06:00 +0000

于 2012-05-29T04:54:38.907 に答える