【问题标题】:iOS NSDate from string with time only来自字符串的 iOS NSDate 只有时间
【发布时间】:2014-07-31 06:11:16
【问题描述】:

我的任务是用时间解析字符串到 NSDate。我用下面的代码做得很好:

NSString* timeStr = @"15:00:00"

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];    
[formatter setDateFormat:@"HH:mm:ss"];

NSDate* result = [formatter dateFromString:timeStr];

但结果我得到 2000-01-01 15:00:00 CET,我不明白为什么日期设置为 2000-01-01,而不是2001-01-01(参考日期)或 1970-01-01。而且 2000-01-01 似乎不是随机值... :)

【问题讨论】:

  • 如何打印NSDate 对象?
  • 当您没有明确设置日期时,日期未定义,在某些情况下(=架构)它是2000-01-01,其他一些情况是0012-01-01,等等......你不能依赖如果未定义,则为特定值。
  • 如何打印?使用 NSLog?甚至我不需要打印我的 NSDate 对象 - 我只是在 XCode @holex 中观看它如何为我的架构设置默认年份?

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

如果您希望它只是一个带有日期部分的字符串,只需使用 dateFormatter,类似于您之前所做的。

NSString* timeStr = @"15:00:00";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[formatter setDateFormat:@"HH:mm:ss"];

NSDate* result = [formatter dateFromString:timeStr];

[formatter setDateFormat:@"YYYY-MM-DD"];
timeStr = [formatter stringFromDate:result];

或者您需要直接在日期格式化程序中设置日期字符串,这是因为如果您在日期格式化程序中指定时间字符串,您将获得日期和时间字符串的组合

 NSString* dateStr = @"2001-01-01";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[formatter setDateFormat:@"YYYY-MM-DD"];

NSDate* result = [formatter dateFromString:dateStr];

【讨论】:

  • 是的,我知道如何将日期部分添加到我的 NSDate 对象中,但这不是我的问题。我不明白为什么有 2000 年,而不是 0001 或 1970 或 2001
  • 希望这是我们在 iOS 中获得的默认日期,当日期未设置时。请检查链接。有时此链接会提供所需的答案。 folkstalk.com/2011/11/date-functions-in-hive.html
【解决方案2】:

你没有在时间之外传递任何信息。因此,您的 NSDate 中的任何其他值都是未定义的。

【讨论】:

  • 也许NSDateFormatterNSDate 只是用2000 初始化年份值。我真的不明白你的问题的重点。如果你希望你的日期对象有一个特定的年份值,你必须设置它。
  • 如果您没有看到我的问题的重点,您为什么要尝试回答?问题很简单。 IOS中2000-01-01日期的含义是什么,为什么在我的例子中NSDate对象初始化为2000-01-01而不是2001-01-01。我在我的应用程序中遇到了一个问题,即比较两个仅存储时间的 NSDate-s,并且由于“不同的日期”,我的比较没有奏效。我已经通过将日期设置为 2000-01-01 解决了我的问题,但这个值是硬编码的。我认为如果我从某个地方得到 2000-01-01 日期会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多