【问题标题】:Convert Date And Time To TimeStamp [duplicate]将日期和时间转换为时间戳 [重复]
【发布时间】:2014-04-11 11:43:47
【问题描述】:

我有一个这样的约会:

2014-01-31 17:40:56

如何将其转换为以毫秒为单位的时间戳?

结果为@​​987654322@,由PHP计算得出。

如何在 Objective C 中将2014-01-31 17:40:56 转换为1391170256309

【问题讨论】:

  • (这有点应该被标记为重复,但我懒得查。)

标签: ios iphone objective-c nsdate gmt


【解决方案1】:

这对你想要做的事情有用吗?

NSString * dateString = @"2014-01-31 17:40:56";
NSDateFormatter *df=[[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSDate *date = [df dateFromString:dateString];

NSTimeInterval since1970 = [date timeIntervalSince1970]; // January 1st 1970

double result = since1970 * 1000;

【讨论】:

  • 大部分正确。日期格式化程序区域设置应设置为 en_US_POSIX,时间间隔必须乘以 1000 以产生毫秒。
  • 更新了,你知道为什么它返回的值与他指定的略有不同吗?
  • 如果毫秒值是从字符串派生的,而不是反过来,为什么毫秒值不总是 1000 的倍数,这一点尚不清楚。可能是 OP 的数字来自以两种形式向 PHP 询问日期,或者来自将数字转换为 char,而不是将 char 形式转换为数字。
  • 如果你想匹配 MySQL 中的 UNIX_TIMESTAMP() 时间戳格式(只有 10 位数字),那么不要乘以 1000 并使用 INT:int result = since1970
【解决方案2】:

NSDate 有一个针对这个特定场景的工厂方法

- (NSTimeInterval)timeIntervalSince1970

正在计算的结果称为“纪元时间”。

【讨论】:

  • 但当然不是毫秒。
【解决方案3】:

这是我用于 NSDate 到 --> 毫秒的示例代码:

NSTimeInterval seconds = [NSDate timeIntervalSinceReferenceDate];
double milliseconds = seconds*1000;

注意:参考日期为 2001 年 1 月 1 日,GMT 因此乘以 1000

Reference - Apple Official Docs

【讨论】:

  • 通常毫秒时间是相对于 1970 年——UNIX 纪元表示的。
  • @HotLicks 我只是在看 Apple docs ,它与我在回答中添加的内容相同。请告诉我,我仍然会改进我的答案。
  • 这取决于您期望的参考日期。几乎所有这种形式的互联网时间戳都参考了 1970 年,即“UNIX 时代”(这就是提供 ...since1970 方法的原因)。 Apple 引用 2001,一些 IBM 系统引用 2000,但这些数字通常不用于互联网时间。
猜你喜欢
  • 2018-09-12
  • 2014-06-26
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
相关资源
最近更新 更多