【问题标题】:How would I be able to convert the date into an integer?如何将日期转换为整数?
【发布时间】:2014-03-05 01:00:15
【问题描述】:

我需要能够将一天中的日期转换为整数,以便我可以将其保存为整数,以便在我的代码中的其他区域使用。我知道还有其他方法可以在 Xcode 中保存日期,但是对于这个特定问题,我需要将其用作整数。所以我的全部问题是如何将日期转换为整数,以便我可以在 NSString 中使用该整数?提前致谢!

【问题讨论】:

  • 您的问题不清楚。您的数据是NSDate 还是NSString 或其他形式?您想将整个日期保存为时间戳还是仅保存部分日期(例如月份中的某天)?到目前为止,您已经尝试过什么来获得所需的东西?
  • 另外值得注意的是,您可以直接从NSDate 转换为各种不同格式的NSString
  • 通常,您使用 NSDate 的 timeIntervalSince1960,它产生自 1960 年以来的双精度浮点值秒,然后乘以所需的任何乘数(1000 或 1000000)来产生您想要的值.最后投到int64_t
  • 如果你的日期类型是NSDate,你可以使用:NSInteger timeIntervalSince1970 = [date timeIntervalSince1970];
  • @hot 你为什么要这么做?有非常好的实例方法可以为您完成这一切。

标签: ios date nsstring integer


【解决方案1】:

您可以使用timeIntervalSinceReferenceDate 方法来做到这一点。

// Get time from baseline date to now as a double.
double interval = [[NSDate date] timeIntervalSinceReferenceDate];

// Re-apply the time value
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:interval];

参考日期是始终具有相同值的基准日期。因此,您可以放心地将其用作参考点。然后,您只需在参考日期和现在之间存储NSTimeInterval(typedef 为双精度)。这为您提供了从参考日期到现在的秒数。

编辑:

如 cmets 中所述,如果您的日期早于 2001 年,您可以使用 1970 年的参考日期。

// Get time from baseline date to now as a double.
double interval = [[NSDate date] timeIntervalSince1970];

// Re-apply the time value
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];

如果您的日期晚于 2001 年,则任何一种方法都适合您。

您可以使用将双精度转换为整数

int 间隔 = (int)[[NSDate 日期] timeIntervalSince1970];

由于双精度数将被截断到最接近的秒数,因此您需要决定是向上取整还是向下取整。保持原样将四舍五入。您可以使用以下方法四舍五入到最接近的秒数:

interval = round(interval);

【讨论】:

  • 大多数方案使用 1960 作为参考日期,因此通常首选 timeIntervalSince1960。
  • 你是说 1970 年?自 1960 年以来就没有参考点。我选择 ReferencedDate 是因为使用 1970 会产生一个巨大的数字,而这并不是他真正需要的。将参考点存储到 2001 与较小的值一样好。
  • timeIntervalSinceReferenceDate 是接收器与系统绝对参考日期(格林威治标准时间 2001 年 1 月 1 日的第一时刻)之间的时间间隔。如果接收方早于参考日期,则该值为负数。所以最好使用 timeIntervalSince1970
  • 是的,我是说 1970 年。记错了。
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 2021-08-17
  • 2018-10-16
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多