【问题标题】:Convert NSDate to an Integer将 NSDate 转换为整数
【发布时间】:2014-11-21 10:36:12
【问题描述】:

所以我的困境是我无法弄清楚如何仅将日期存储在整数值中(使用获取:

NSDate* date = [NSDate date]

我在网上找到了这段代码,看起来与我需要的相似(我认为将 setDateFormat 更改为 @"dd" 会起作用(但显然它没有)

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:date];

我只是忘记了一些关于整数的简单知识吗?

【问题讨论】:

  • –timeIntervalSince1970,然后是– initWithTimeIntervalSince1970:。实际的NSTimeInterval 是常规的double,但如果不需要片段部分,可以将其转换为NSInteger

标签: ios integer nsdate


【解决方案1】:

斯威夫特

NSDateInt

// using current date and time as an example
let someNSDate = NSDate() 

// convert NSDate to NSTimeInterval (typealias for Double)
let timeInterval = someNSDate.timeIntervalSince1970

// convert to Integer
let myInt = Int(timeInterval)

执行DoubleInt 的转换会导致毫秒数丢失。如果您需要毫秒数,请乘以 1000,然后再转换为 Int

IntNSDate

为了完整起见,包括相反的内容。

// convert Int to Double
let timeInterval = Double(myInt)

// create NSDate from Double (NSTimeInterval)
let myNSDate = NSDate(timeIntervalSince1970: timeInterval)

只要我保持一致,我也可以使用 timeIntervalSinceReferenceDate 而不是 timeIntervalSince1970。这是假设时间间隔以秒为单位。请注意,Java 使用毫秒。

更新

从 Swift 3 开始,转换将使用 Date 而不是 NSDate。有关 Swift 3 版本,请参阅 this answer

【讨论】:

  • timeIntervalSince1970 应该被接受为适当的答案,而不是旋转 NSDateFormatter,创建一个字符串,然后将该字符串解析为一个整数。它只是更有意义!
【解决方案2】:

setDateFormat: 中使用dd

这将只给出日期,但在字符串中。

在此之后,您可以在 integerValue 的帮助下将字符串转换为整数。

编辑:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd"];


NSString *stringFromDate = [formatter stringFromDate:[NSDate date]];
NSInteger integerDate = [stringFromDate integerValue];

【讨论】:

  • 所以就像 [formatter setDateFormat:@"dd"];?我之前尝试过但无济于事编辑:你知道如何将它存储在整数中吗?
  • @CallMeGreeny:检查完整的实现
  • @AnoopVaidya 是否可以在没有 NSString 的情况下直接将 NSDate 转换为 NSInteger?
  • @SmitSaraiya:不!如果您不想拥有它,可以删除中间字符串变量。 NSInteger integerDate = [[formatter stringFromDate:[NSDate date]] integerValue];
【解决方案3】:

虽然我相信原始发帖人只是在寻找日期的“天”部分,但我想鉴于标题,其他人会来这个问题寻找将日期转换为规范整数表示的方法(例如例如,自纪元以来的毫秒数)。

Cocoa 日期库将日期存储为自 00:00:00 UTC on 1 January 2001 以来的浮点秒数。

要获取此值,请致电[NSDate timeIntervalSinceReferenceDate]。要获取自 Unix 纪元以来的秒数(浮点数),请调用 [NSDate timeIntervalSince1970]。要获得毫秒,只需乘以 1000。

因此,要获取自 Unix 纪元以来的毫秒数,作为整数:

(NSInteger)round([NSDate timeIntervalSince1970] * 1000)

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2017-04-23
    • 2021-09-11
    相关资源
    最近更新 更多