2013-02-07 96 views
0

我正在構建一個iPhone應用程序需要時間:一輛汽車必須在某個特定時間點停車,所以如果汽車遲早會獲得積分。從TextView到NSDate的時間

我需要儘可能獲得最精確的時間,所以我想使用毫秒,但結果令人失望。

的時間是在文本字段類型,比方說12時17分22秒,代碼如下:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
[dateFormatter setDateFormat:@"HH:mm:ss"]; 

timeLegStart = [NSDate new]; 
timeLegStart = [dateFormatter dateFromString:setStartTime.text]; 

NSLog(@"timeLegStart = %@",timeLegStart); 

輸出爲1970-01-01 11點17分22秒+ 0000,我想它是12:17:22:000

在此先感謝!

+0

您使用的是GMT時間而非當地時間。你需要設置你的日期或格式化程序的時間線,我忘記了。 – nielsbot

+0

哦,你是這麼做的!但我仍然認爲它是一個時區問題,所以在這種情況下這是不正確的。 – nielsbot

+0

請嘗試刪除'timeLegStart = [NSDate new];'並檢查。 – HRM

回答

0

設置你的NSDateFormatter的屬性像這樣(與你的時區信息更換):

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/Sao_Paulo"]]; 
[dateFormatter setDateFormat:@"HH':'mm':'ss' 'z"]; 
[dateFormatter setLocale:locale]; 
0

這裏的問題是,包括NSDate的日期和時間,他們不是單獨available.When你給輸入日期與時間規格只有它加載日期開始日期值與您提供的時間和創建一個日期。這裏是日期作爲輸出。 其實沒有問題的工作。

您可以使用相同的格式,以獲得時間收回到

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
[dateFormatter setDateFormat:@"HH:mm:ss"]; 
NSDate* timeLegStart = [NSDate new]; 
timeLegStart = [dateFormatter dateFromString:@"12:12:12"]; 
NSLog(@"timeLegStart = %@",[dateFormatter stringFromDate:timeLegStart]); 

,它會給你

timeLegStart = 12:12:12 

編輯:登錄NSDate的時候它會在格林尼治標準時間格式only.Since你將時區設置爲當地時間日期將始終顯示,如你得到的。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [dateFormatter setDateFormat:@"HH:mm:ss"]; 
    NSDate* timeLegStart = [NSDate new]; 
    timeLegStart = [dateFormatter dateFromString:@"12:12:12"]; 
    NSLog(@"timeLegStart = %@",timeLegStart); 

會給你

2000-01-01 12:12:12 +0000 

編碼快樂:)

+0

對不起,它不起作用。無論如何,我需要NSDate來計算NSTimeInterval。 – Luis

+0

你確定它不工作?因爲我有它在一個新的項目中工作。 –

+0

@路易斯:我沒有得到你。你想今天與你輸入的字符串的日期? –

0

嗯,我已經整理出來這樣說:

- (void)fijaTiempoInicio 
    { 
    //getting current day 
    NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:~ NSTimeZoneCalendarUnit fromDate:[NSDate date]]; 
    [dateComponents setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Spain"]]; 
    NSDate *currentDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents]; 

    //extracting year, month and day from current date 
    NSDateFormatter *df = [[NSDateFormatter alloc]init]; 
    [df setDateFormat:@"dd"]; 
    NSString *currentDayString = [NSString stringWithFormat:@"%@",[df stringFromDate:currentDate]]; 

    [df setDateFormat:@"MM"]; 
    NSString *currentMonthString = [NSString stringWithFormat:@"%@",[df stringFromDate:currentDate]]; 

    [df setDateFormat:@"yyyy"]; 
    NSString *currentYearString = [NSString stringWithFormat:@"%@", [df stringFromDate:currentDate]]; 

    NSDateFormatter *ft = [[NSDateFormatter alloc]init]; 

    [ft setTimeZone:[NSTimeZone localTimeZone]]; 
    [ft setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

    NSString *tempDate = [NSString stringWithFormat:@"%@-%@-%@ %@",currentYearString,currentMonthString,currentDayString,txtTiempoInicioTramo.text]; 
NSLog(@"tempDate= %@",tempDate); 

    startTime = [ft dateFromString:tempDate]; 
    NSLog(@"startTime= %@",startTime); 

然後,anothe方法計算差值在兩個NSDates之間,這是一個以毫秒爲單位的數字 - 浮點數

- (IBAction)btnCapturarTiempo:(id)sender 
    { 

    NSDateFormatter *formatCarTime = [[NSDateFormatter alloc]init]; 
    [formatCarTime setDateFormat:@"HH:mm:ss"]; 
    [formatCarTime setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Madrid"]]; 

    carTime = [NSDate date]; 
    difference = [carTime timeIntervalSinceDate:startTime]; 
    labelTiempoCoche.text = [NSString stringWithFormat:@"%f",difference]; 

謝謝大家的時間和建議。 Luis