gpt4 book ai didi

objective-c - 使用 NSDateFormatter 解析日期字符串,月份从 0 开始

转载 作者:行者123 更新时间:2023-12-03 17:31:27 24 4
gpt4 key购买 nike

我无法解析此日期字符串:@"2002 0 20",其中 0 是一月(一年中的第一个月是 0,而不是 1)。我可以使用NSDateFormatter来解析这个字符串吗?

这里http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Parsing_Dates_Times我读到该月应该从 1 号开始。

更新我需要这个格式化程序,因为我有很多这种格式的数据(这不是我的数据)。

在不创建子类和重写格式方法的情况下,我还没有找到任何使用 NSDateFormatter 的解决方案。我不使用 NSScan,因为它是一个太复杂的解决方案,但我认为 @Andy 是对的。

我使用此代码来解析字符串:

- (BOOL)getObjectValue:(out __autoreleasing id *)obj forString:(NSString *)string range:

(inout NSRange *)rangep error:(out NSError *__autoreleasing *)error
{
int year = 0;
int month = -1;
int day = -1;

int coutRead = sscanf([string cStringUsingEncoding:NSUTF8StringEncoding], "Date.UTC(%i, %i, %i)", &year, &month, &day);

BOOL result = NO;
if (coutRead == 3)
{
NSDateComponents* components = [[NSDateComponents alloc] init];
components.year = year;
components.month = month + 1;
components.day = day;

*obj = [self.calendar dateFromComponents:components];

result = YES;
}
else
{
obj = 0;
*rangep = NSMakeRange(NSNotFound, 0);
result = NO;
}

return result;
}

最佳答案

试试这个:

NSDateFormatter* formatter = [NSDateFormatter new];
formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
formatter.shortMonthSymbols = @[@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11"];
formatter.dateFormat = @"yyyy MMM dd"; // Note 3 Ms for "short month" format
NSDate* theDate = [formatter dateFromString:@"2002 0 20"];

结果:

2002-01-20 00:00:00 +0000

关于objective-c - 使用 NSDateFormatter 解析日期字符串,月份从 0 开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27333615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com