2

我在将字符串转换为 NSDate 时遇到了一些问题,所以也许有更好/更简单的方法来做到这一点。

我有一个日期格式为“dd/mm/yyyy”的 NSString,但是,有些不包含年份,只是“dd/mm”。

我正在尝试将日期和月份存储在我的 SQLite 数据库中,因此我需要单独取出这些组件。我曾尝试将它们转换为 NSDate 但因为有些没有年份,它与 NSDate 格式不匹配并且失败。我在遵循这样的示例时也遇到了问题因为我的原始 dateString 格式不同(使用斜杠而不是破折号)。

有任何想法吗?谢谢

4

6 回答 6

3
NSString *dateString = @"01/04/1981";
NSArray *dateComponentsArray = [dateString componentsSeparatedByString:@"/"];
NSString *monthString = [dateComponentArray objectAtIndex:0];
NSString *dayString = [dateComponentsArray objectAtIndex:1];
if ([dateComponentsArray objectAtIndex:2]) {
    NSString *yearString = [dateComponentsArray objectAtIndex:2];
}

NSFormatter 似乎有点矫枉过正,因为它非常昂贵。如果您确定不会对格式进行任何更改,那么这应该可以。

于 2012-04-28T00:10:01.097 回答
2

SQLite 甚至没有适当的本地日期类型(请参阅我最近关于此主题的帖子),并且在您可以在 SQLite 中存储日期的范围内,在没有一年的情况下它没有意义。也不确定没有一年的 NSDate 是否有意义。

就个人而言,我只是将日、月和年这三个字段作为单独的数字字段存储在数据库中,如果您不知道该人的出生年份,则将年份留空。因此,只需按照@benzado 的建议使用一个简单的 NSScanner:

int day;
int month;
int year;

NSScanner *scanner = [NSScanner scannerWithString:birthdayString];

if ([scanner scanInt:&month] &&
    [scanner scanString:@"/" intoString:nil] &&
    [scanner scanInt:&day])
{
    // found valid month/day

    if ([scanner scanString:@"/" intoString:nil] && 
        [scanner scanInt:&year])
    {
        // found year too
    }
}

或者使用 NSString 的 componentsSeparatedByString 将其放入 @Jacob 建议的字符串数组中:

NSString *monthString, *dayString, *yearString;

NSArray *dateComponents = [birthdayString componentsSeparatedByString:@"/"];

if ([dateComponents count] >= 2)
{
    monthString = [dateComponents objectAtIndex:0];
    dayString   = [dateComponents objectAtIndex:1];

    // found month and day

    if ([dates count] == 3)
    {
        yearString = [dateComponents objectAtIndex:2];

        // found year, too
    }
}
于 2012-04-27T23:08:43.737 回答
2

您可以使用良好的 ol'fashed NSScanner

NSScanner *scanner = [NSScanner scannerWithString:x];
int month, day;
if (
    [scanner scanInt:&month] &&
    [scanner scanString:@"/" intoString:nil] &&
    [scanner scanInt:&day]
) {
    NSLog(@"Got month = %d and day = %d", month, day);
}

对照文档检查这一点,因为我是凭记忆写的。

于 2012-04-28T00:18:11.623 回答
1

我认为这有你需要的答案:

Apple iOS 日期格式指南

于 2012-04-27T21:12:22.770 回答
1

如果它那么简单,你不能只检查'/'吗?也尝试使用 NSDateFormatter,这可能会对您有所帮助。

于 2012-04-27T21:03:44.827 回答
1

当日期没有年份时,您需要弄清楚这意味着什么。它假设当前年份还是其他年份?一旦弄清楚了,就可以将年份附加到字符串中,然后解析日期。

于 2012-04-27T20:54:55.633 回答