Objective-C 将字符串转换为日期和时间格式

Objective-C Convert a string to date and time format

我在获取转换为 NSDate 的日期时遇到了问题。我的要求是我有一个像@"01-01-2016 22:22:22" 这样的字符串,我想把它转换成日期形式。然后检查设备时间格式并根据该格式更改其格式。下面是我的代码

NSDateFormatter *dateform=[[NSDateFormatter alloc]init];
[dateform setDateStyle:NSDateFormatterLongStyle];
[dateform setTimeStyle:NSDateFormatterShortStyle];
[dateform setDateFormat:@"MM-dd-YYYY HH:mm:ss"];


NSString *timeStr=@"01-01-2016 22:22:22"; //sample date
NSDate *dt=[dateform dateFromString:timeStr];

NSString *dateString=[dateform stringFromDate:dt];
NSRange *amRange=[dateString rangeOfString:[dateform AMSymbol]];
NSRange *pmRange=[dateString rangeOfString:[dateform PMSymbol]];
BOOL is12h=(amRange.location==NSNotFound && pmRange.location==NSNotFound);
if(is12h)
{
   [dateform setDateFormat:@"MM-dd-YYYY hh:mm:ss"];
}
else
{
   [dateform setDateFormat:@"MM-dd-YYYY HH:mm:ss"];
}
dateString=[dateformatter stringFromDate:dt];

NSDate *dt=[dateform dateFromString:timeStr]; 此行将字符串转换为错误的日期。结果为 20-12-2015 16:52:22 +0000。 我哪里错了请帮忙....

将此更正为 yyyy 而不是 YYYY

[dateform setDateFormat:@"MM-dd-yyyy HH:mm:ss"];

"YYYY" 是基于周的日历年。

"yyyy"为平历年

然后,检查这个格式:: "MM-dd-YYYY hh:mm:ss a"

if(is12h)
{
    [dateform setDateFormat:@"MM-dd-YYYY hh:mm:ss a"];
}
else
{
    [dateform setDateFormat:@"MM-dd-YYYY HH:mm:ss"];
}

希望对您有所帮助。
谢谢

一个常见的错误是使用 YYYY。 yyyy 指定日历年,而 YYYY 指定年份(“一年中的第几周”),用于 ISO 年-周日历。在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常您应该使用日历年。

所以在你的情况下,请尝试使用小 "yyyy" 而不是

这是我准备的日期转换方法

+(NSString *)convertDate:(NSString *)strDate fromFormat:(NSString *)strFromFormat toFormat:(NSString *)strToFormat
{
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = strFromFormat;
    NSDate *dtNew = [dateFormatter dateFromString:strDate];
    dateFormatter.dateFormat = strToFormat;
    return [dateFormatter stringFromDate:dtNew];
}

+(NSString *)convertDateToString:(NSDate *)strDate toFormat:(NSString *)strToFormat
{
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = strToFormat;
    return [NSString stringWithFormat:@"%@",[dateFormatter stringFromDate:strDate]];
}


+(NSDate *)convertStringToDate:(NSString *)strDate fromFormat:(NSString *)strFromFormat
{
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = strFromFormat;
    return [dateFormatter dateFromString:strDate];
}

将这些方法放在一个 class 中并在需要时通过 class 调用它...

对于你的问题,调用这个方法就像..

NSDate *dtnew = [YourClass convertStringToDate:timeStr fromFormat:@"MM-dd-yyyy HH:mm:ss"];

试试这个人,

NSString *dateString =  @"01-01-2016 22:22";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy  HH:mm"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSDate *date = [dateFormatter dateFromString:dateString];