将日期和时间转换为时间戳 [重复]
Posted
技术标签:
【中文标题】将日期和时间转换为时间戳 [重复]【英文标题】: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
?
【问题讨论】:
(这有点应该被标记为重复,但我懒得查。) 【参考方案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,但这些数字通常不用于互联网时间。以上是关于将日期和时间转换为时间戳 [重复]的主要内容,如果未能解决你的问题,请参考以下文章