【发布时间】:2015-07-07 07:46:49
【问题描述】:
我想将自 1970 年 1 月 1 日以来经过的毫秒数转换为 NSDate 而不会丢失毫秒数。每个解决方案都说将毫秒除以 1000 并使用 dateWithTimeIntervalSince1970。但我也想保留毫秒。
【问题讨论】:
-
请详细说明或放一些代码
标签: ios objective-c timestamp nsdate epoch
我想将自 1970 年 1 月 1 日以来经过的毫秒数转换为 NSDate 而不会丢失毫秒数。每个解决方案都说将毫秒除以 1000 并使用 dateWithTimeIntervalSince1970。但我也想保留毫秒。
【问题讨论】:
标签: ios objective-c timestamp nsdate epoch
dateWithTimeIntervalSince1970 的参数是 NSTimeInterval,它不是整数值(它是 double)。没有理由失去毫秒。只是在执行除法时不要使用整数。
例如:
long long milliseconds = 1576058147753;
NSTimeInterval seconds = (NSTimeInterval)milliseconds / 1000.0;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:seconds];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
[formatter setLocalizedDateFormatFromTemplate:@"dMMMMyyyyHHmmssSSS"];
2019 年 12 月 11 日 01:55:47.753
注意 753 的毫秒数。
【讨论】:
NSTimeInterval of 1576058147.753,例如,产生日期为2019-12-11T09:55:47.753Z(注意毫秒)。如果您有毫秒为零的代码,那么您的问题就在其他地方。或者,如果您只是打印日期并在末尾看到 +0000,那是时区,而不是毫秒。更改为包含毫秒的格式化程序。
您可以通过这种方式获取日期。您必须根据您的要求传递时间间隔和日期格式。
-(NSString *)getStringFromDate:(double)interval withFormat:(NSString*)format
{
if (interval == 0)
{
return @"";
}
double seconds = interval;
NSTimeInterval timeInterval = (NSTimeInterval)seconds;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter* df_utc = [[NSDateFormatter alloc] init];
[df_utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df_utc setDateFormat:format];
NSString *Date=[df_utc stringFromDate:date];
return Date;
}
希望这会对你有所帮助。
【讨论】: