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];
我在获取转换为 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];