NSDate / NSDateFormatter - 仅存储时间,而不是日期?

时间:2011-08-22 21:43:07

标签: iphone objective-c ios nsdate nsdateformatter

我一直在四处寻找,但我没有看到任何可以解决这个问题的事情,所以我希望有人可以帮我解决这个问题。我想要做的是使用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,但我不确定我做错了什么。

4 个答案:

答案 0 :(得分:20)

设置区域设置和日期格式后,您应该能够将日期转换为字符串并返回。因为您只需要时间,所以可以忽略日期部分。

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)

答案 1 :(得分:2)

经过深思熟虑后,尝试了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的人。

答案 2 :(得分:0)

快捷键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)

答案 3 :(得分:-1)

我最终没有使用NSDate / NSDateFormatter,因为我无法使其正常工作。我的解决方案包括将时间字符串解析为小时,分钟和秒。我最终最终将所有内容转换为秒,并以这种方式存储它们。