55

我正在使用 NSDateFormatter 在 iPhone 应用程序中工作。我正在从 web 服务中获取时间,例如"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”。谁能帮我解决这个问题?提前致谢。

4

8 回答 8

113

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

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

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

谢谢。

于 2012-07-23T07:40:14.317 回答
23

您可以使用.ShortStylewhich 将适应当前的语言环境:

let timeFormatter = NSDateFormatter()
timeFormatter.dateStyle = .NoStyle
timeFormatter.timeStyle = .ShortStyle
timeFormatter.stringFromDate(NSDate())

哪个返回17:125:12 PM取决于当前的设备语言环境。

于 2016-01-20T14:48:28.287 回答
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);
于 2012-07-23T07:39:57.050 回答
14

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

于 2012-07-23T07:42:00.307 回答
10

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

斯威夫特 5.1+

let dateFormatter = DateFormatter()
//if you want 12AM,5PM then use "hh mm a"
//if you want 00AM,17PM then use "HH mm a"
dateFormatter.dateFormat = "hh mm a"
let stringDate = dateFormatter.string(from: Date())
print(stringDate)
于 2015-04-22T10:54:30.867 回答
8

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

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

这始终保持 24 小时格式

NSLocale *24hourFormat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
df.locale = 24hourFormat
于 2015-08-07T10:33:46.597 回答
3

您的日期格式应为:

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

检查日期格式模式 Doku

于 2012-07-23T07:40:38.577 回答
0

斯威夫特 5:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh mm a"
let formattedDate = dateFormatter.string(from: Date())
于 2020-05-29T19:48:52.247 回答