如何以am / pm格式获取时间iphone NSDateFormatter?

时间:2012-07-23 07:32:08

标签: iphone ios time nsdateformatter

使用NSDateFormatter在iPhone应用中工作。我从像"00:00:00", "16:00:00","15:30:00" and so on这样的网络服务中获取时间。我需要将这些时间转换为 如果时间是"00:00:00" to "12 AM",如果时间是"16:00:00" to "4 PM",如果时间是“15:30:00”到“3.30 PM”。我已经使用了以下代码,但是当我通过"16:00:00" the date returns null时。

 NSString *dats1 = @"16:00:00";
 NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease];
 [dateFormatter3 setDateStyle:NSDateFormatterMediumStyle];  
 [dateFormatter3 setDateFormat:@"hh:mm:ss"]; 
 NSDate *date1 = [dateFormatter3 dateFromString:dats1];
 NSLog(@"date1 : %@", date1); **// Here returning (null)**

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 [formatter setDateFormat:@"hh:mm a"];
 NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)**
 [formatter release];

当通过“00:00:00”时,它正确地返回“12 AM”。有谁可以帮我解决这个问题?提前谢谢。

8 个答案:

答案 0 :(得分:113)

如果您的时间格式位于24hrs,请使用"HH:mm:ss"格式。请测试代码并告诉我它是否适合您。我已经过测试,它正在返回"4 PM"

NSString *dats1 = @"16:00:00";
 NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease];
 [dateFormatter3 setDateStyle:NSDateFormatterMediumStyle];  
 [dateFormatter3 setDateFormat:@"HH:mm:ss"]; 
 NSDate *date1 = [dateFormatter3 dateFromString:dats1];
 NSLog(@"date1 : %@", date1); **// Here returning (null)**

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 [formatter setDateFormat:@"hh:mm a"];
 NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)**
 [formatter release];

感谢。

答案 1 :(得分:17)

您可以使用适合当前区域设置的ActiveQuery

.ShortStyle

根据当前设备区域设置返回let timeFormatter = NSDateFormatter() timeFormatter.dateStyle = .NoStyle timeFormatter.timeStyle = .ShortStyle timeFormatter.stringFromDate(NSDate()) 17:12

答案 2 :(得分:15)

为什么要再次分配NSDateFormatter

您只需将其格式化为NSDate,然后再将其格式化为NSString

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

    NSDate *date = [dateFormatter dateFromString:dats1];

    [dateFormatter setDateFormat:@"hh:mm a"];

    NSString *formattedDate = [dateFormatter stringFromDate:date];

    NSLog(@"%@",formattedDate);

答案 3 :(得分:14)

尝试HH:mm:ss(注意小时格式的大写字母)

答案 4 :(得分:8)

希望有人愿意在Swift中获得它

对于Swift

tbody{
    position:relative;
    overflow:hidden;
    height:300px;
}

答案 5 :(得分:8)

以下代码始终保持12小时格式:

NSLocale *12hourFomrat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = 12hourFomrat;

这始终保持24小时格式

NSLocale *24hourFormat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
df.locale = 24hourFormat

答案 6 :(得分:3)

您的日期格式应为:

  [dateFormatter3 setDateFormat:@"HH:mm:ss"]; 

检查Date Format Pattern Doku

答案 7 :(得分:0)

迅速5:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh mm a"
let formattedDate = dateFormatter.string(from: Date())