如何将长整数时间转换为 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 以显示时间?的主要内容,如果未能解决你的问题,请参考以下文章