簡體   English   中英

NSDate / NSDateFormatter - 僅存儲時間,而不是日期?

[英]NSDate/NSDateFormatter - Storing only time, not date?

我一直在環顧四周,但我沒有看到任何解決這個問題的事情,所以我希望有人可以幫我解決這個問題。 我想要做的是使用NSDate變量(在核心數據中)來存儲時間,而不是日期和時間,但只是時間格式為HH:MM:SS;

在查看NSDateFormatter類引用和提供的示例代碼之后,我能夠調整它並認為我的代碼應該如下所示:

NSDateFormatter *timeOfArrival = [[NSDateFormatter alloc] init];
[timeOfArrival setTimeStyle:NSDateFormatterLongStyle];
[timeOfArrival setDateStyle:NSDateFormatterNoStyle];
[timeOfArrival setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];

NSString *etaStr = [attributeDict objectForKey:@"cumulativeTime"];
NSLog(@"%@", etaStr);
checkpoint.eta = [timeOfArrival dateFromString:etaStr];

直到我嘗試從我的字符串創建我的NSDate對象的最后一行的所有工作,但在那之后,checkpoint.eta仍然是零。

例如,etaStr正確輸出我的預期值00:14:00,但我不確定我做錯了什么。

設置區域設置和日期格式后,您應該能夠將日期轉換為字符串並返回。 因為您只需要時間,所以可以忽略日期部分。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[[NSLocale alloc] 
                 initWithLocaleIdentifier:@"en_US"] autorelease]];
[formatter setDateFormat:@"HH:mm:ss"];
NSString *etaStr = @"00:14:00";
NSDate *generatedDate = [formatter dateFromString:etaStr];
NSLog(@"%@", [formatter stringFromDate:generatedDate]);
[formatter release];

產量

00:14:00

Swift版本

是時候為swift更新這個答案了:

var formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")
formatter.dateFormat = "HH:mm:ss"
let etaString = "00:14:00"
let generatedDate = formatter.dateFromString(etaString)!
let generatedString = formatter.stringFromDate(generatedDate)
println(generatedString)

Swift 3版

var formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.dateFormat = "HH:mm:ss"
let etaString = "00:14:00"
let generatedDate = formatter.date(from: etaString)!
let generatedString = formatter.string(from: generatedDate)
print(generatedString)

經過一番思考后,嘗試了Mundi的答案,看起來Mundi正在創建一個字符串中的字符串而不創建NSDate或轉換為NSDate或從NSDate轉換。 我也需要存儲一個NSDate,所以這里是你如何輕松獲得你想要的東西:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
NSDate *eventDate = [dateFormat dateFromString:[attributeDict objectForKey:@"cumulativeTime"]];
NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[timeFormat setDateFormat:@"HH:mm:ss a"];
NSString *timeString = [timeFormat stringFromDate:eventDate];
NSLog(@"EventDate: %@",timeString);

Mundi的回答是有效的,所以有人應該對他的答案進行投票,因為我投票太快而沒有考慮到在“1/21/13 00:14:00”之前離開約會在這種情況下並不重要,但他應該在它前面放了一個日期,以表明日期沒有輸出。 某個人來自Web服務或其他對象的變量會有日期,那么@“HH:mm:ss a”只會抽出時間。 這也有助於那些在日期或時間需要AM / PM的人。

Swift 4如果你想在今天的日期使用時間

let todate = Date()
        let formater = DateFormatter()
        formater.dateFormat = "yyyy:MM:dd"
       let date = formater.string(from: todate)
        print(date)
        let completeDate = date + ":9:00AM"
        print(completeDate)
        let anotherFormater = DateFormatter()
        anotherFormater.dateFormat = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ"
       anotherFormater.date(from: completeDate)

如果你想在任何日期增加時間,那么: -

  let completeDate = "2019-02-15" + ":9:00AM"
            print(completeDate)
            let anotherFormater = DateFormatter()
            anotherFormater.dateFormat = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ"
           anotherFormater.date(from: completeDate)

我最終沒有使用NSDate / NSDateFormatter,因為我無法讓它正常工作。 我的解決方案包括將時間字符串解析為小時,分鍾和秒。 我最終將所有內容轉換為秒,並以這種方式存儲它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM