我有一个日期时间格式的字符串:“YYYY-MM-DD HH:MM:SS”。
我在源代码中使用它:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"%e. %B %Y"];
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"];
我想将“2010-01-10 13:55:15”转换为“2010年1月10日”。 但我的实施不起作用。
这里有什么问题?
提前多多感谢&最诚挚的问候。
更新了源代码:
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"];
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"];
NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease];
[formatter1 setDateFormat:@"%d. %M4 %Y"];
NSString *test2 = [formatter1 stringFromDate:test1];
答案 0 :(得分:33)
日期格式化程序一次只能处理一种格式。你需要采取这种方法:
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [f dateFromString:@"2010-01-10 13:55:15"];
NSDateFormatter *f2 = [[NSDateFormatter alloc] init];
[f2 setDateFormat:@"d. MMMM YYYY"];
NSString *s = [f2 stringFromDate:date];
现在将是“2010年1月10日”
答案 1 :(得分:6)
以下是使用我的代码中的数据格式化程序的一些示例。您应该可以使用这些功能中的任何一个并根据您的格式进行调整。
USAGE
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [Constants getTitleDateFormatter];
NSString *dateString = [dateFormatter stringFromDate:today];
[dateFormatter release];
功能
+ (NSDateFormatter *) getDateFormatterWithTimeZone {
//Returns the following information in the format of the locale:
//YYYY-MM-dd HH:mm:ss z (Z is time zone)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
return dateFormatter;
}
+ (NSDateFormatter *)dateFormatterWithoutYear {
NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *format = [dateFormatter dateFormat];
format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""];
NSRange secondSpace;
secondSpace.location = format.length-2;
secondSpace.length = 1;
format = [format stringByReplacingCharactersInRange:secondSpace withString:@""];
[dateFormatter setDateFormat:format];
return dateFormatter;
}
+ (NSDateFormatter *) dateFormatterMonthDayOnly {
NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *format = [dateFormatter dateFormat];
format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""];
NSRange range;
range.location = 0;
range.length = 3;
format = [format substringWithRange:range];
[dateFormatter setDateFormat:format];
return dateFormatter;
}
+ (NSDateFormatter *) getTitleDateFormatter {
//Returns the following information in the format of the locale:
//MM-dd-yyyy hh:mm:ssa
NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
NSString *format = [dateFormatter dateFormat];
NSRange secondSpace;
secondSpace.location = format.length-2;
secondSpace.length = 1;
format = [format stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
format = [format stringByReplacingCharactersInRange:secondSpace withString:@""];
[dateFormatter setDateFormat:format];
return dateFormatter;
}
答案 2 :(得分:2)
首先,确保将行为设置为10.4 - 更现代,在我的经验中效果更好。
[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
接下来,如果它们有2种不同的字符串表示形式,则不能使用相同的格式进行解析和格式化,因此请使用2格式化程序,或者在解析和格式化之间更改字符串格式。
还要确保考虑格式化选项:
小写是e是星期几,小写d是月中的某天。
对于月份,请使用MMMM,而不是B。
答案 3 :(得分:1)
您希望使用[NSFormatter dateFromString:]
将基于字符串的日期转换为NSDate
实例。从那里你想要stringFromDate
使用NSDate
,而不是你上面写的字符串。我不确定使用相同的NSDateFormatter进行解析和格式化 - 您可能需要两个单独的实例来处理不同的格式样式。