2017-01-02 44 views
-2

我必須從24小時格式(HH:mm)時間字符串中獲取日期格式(YYYY-MM-dd hh:mm:ss)。從目標C和iOS中的24小時格式時間字符串中獲取不正確的日期

我用下面的代碼,但我得到的輸出錯誤:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]]; 
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
[formatter setDateFormat:@"HH:mm"]; 

NSDate *myDate = [formatter dateFromString:@"13:54"]; 

而且我得到不正確的輸出:2000-01-01 13點54分零零秒+0000

但我想輸出像「2017-01-02 13:54:00」

我檢查了this question但沒有得到正確的解決方案。

+0

打印NSDate或從NSDate格式化的字符串? –

+0

@LyndseyScott我正在打印myDate(NSDate) –

+0

@AnandGautam這是打印NSDate時的預期輸出。如果您需要輸出,您需要打印格式化的日期字符串。 –

回答

2

輸出是正確的。

沒有年/月/日信息的日期字符串在NSDateFormatter中導致日期2000/1/1。

您需要獲取當前日期並用日期字符串的組件替換hourminute組件。

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *todayComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
[formatter setDateFormat:@"HH:mm"]; 
NSDate *myDate = [formatter dateFromString:@"13:54"]; 
NSDateComponents *myDateComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute fromDate:myDate]; 
todayComponents.minute = myDateComponents.minute; 
todayComponents.hour = myDateComponents.hour; 
NSDate *myCompleteDate = [calendar dateFromComponents:todayComponents]; 
+0

非常感謝@vadian,你明白了。 –

0

嘗試了這一點

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [dateFormatter1 dateFromString:yourdateString]; 

NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; // <- Local time zone 
NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 

NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date]; 
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date]; 
      NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset; 



NSDate *destinationDate = [[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date]; 

NSDateFormatter *dateFormatters = [[NSDateFormatter alloc] init]; 
      [dateFormatters setDateFormat:@"MMM dd yyyy hh:mm"]; 

self.callDate = [dateFormatters stringFromDate: destinationDate]; 
+0

@Hassan感謝您的回覆,我嘗試了您的代碼並獲取日期「nil」,最終輸出即將到來「Mar 03 5877521 -08:-31」 –

1

試試這個代碼..

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"]; 
NSString *myString = [dateFormatter stringFromDate:myDate]; 
+0

(大部分是正確的,但不是創建並使用'now'' NSDate ',操作應該使用他的'myDate''NSDate'。另外,將字符串聲明在與初始化不同的行上似乎沒有必要。) –

+0

@Himanshu這是用於獲取當前日期的「yyyy-MM-dd HH-mm- ss「格式。我的問題是不同的兄弟.. –

+0

@LyndseyScott我的人士Himanshu的代碼試圖用「指明MyDate NSDate的」,而不是「現在」,但得到不正確的輸出:2000-01-01 19-24-00 –

相關問題