如何将长整数时间转换为 NSString 或 NSDate 以显示时间?

Posted

技术标签:

【中文标题】如何将长整数时间转换为 NSString 或 NSDate 以显示时间?【英文标题】:How to convert long-integer time to NSString or NSDate to display time? 【发布时间】:2012-11-05 08:14:57 【问题描述】:

我得到了一个 Java Date 格式的序列号,它转换为长整数,例如“1352101337000”。 我遇到的问题是如何将这个长整数解析回 NSDate 或 NSString 以便清楚知道序列号显示的时间。

有人对此案有解决方案吗?

【问题讨论】:

【参考方案1】:

使用这个,

NSTimeInterval timeInMiliseconds = [[NSDate date] timeIntervalSince1970];

要改回来,

NSDate* date = [NSDate dateWithTimeIntervalSince1970:timeInMiliseconds];

根据apple documentation,

NSTimeInterval:用于指定时间间隔,以秒为单位。

typedef double NSTimeInterval;

它是双精度类型。

要将日期转换为字符串,

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];

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

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

[formatter release];

【讨论】:

还要检查你是否需要添加这个:[NSDate dateWithTimeIntervalSince1970:(ms / 1000)];【参考方案2】:

斯威夫特

此答案已针对 Swift 3 进行了更新,因此不再使用 NSDate

执行以下步骤将长整数转换为日期字符串。

// convert to seconds
let timeInMilliseconds = 1352101337001
let timeInSeconds = Double(timeInMilliseconds) / 1000

// get the Date
let dateTime = Date(timeIntervalSince1970: timeInSeconds)

// display the date and time
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
print(formatter.string(from: dateTime)) // November 5, 2012 at 3:42:17 PM

注意事项

自 1970 年以来,Java 日期以毫秒为单位存储为 long 整数,因此可以正常工作。但是,在使用上述方法将任何旧整数转换为日期之前,请确保此假设成立。如果你是converting a time interval in seconds,当然不要除以 1000。 还有其他方法可以进行转换并显示字符串。见this fuller explanation。

【讨论】:

以上是关于如何将长整数时间转换为 NSString 或 NSDate 以显示时间?的主要内容,如果未能解决你的问题,请参考以下文章

将长整数转换为字符/符文

如何将具有负整数的NSString转换为负整数

在 Xcode Playground 中将 NSString 转换为 CString

如何将长转换/转换为字符串?

如何将长格式的数据框转换为适当格式的列表?

SOAP 应用程序变量 - 整数的 NSNumber 或 NSString?