Ios 将历元毫秒转换为NSDate

Ios 将历元毫秒转换为NSDate,ios,objective-c,timestamp,nsdate,epoch,Ios,Objective C,Timestamp,Nsdate,Epoch,我想将自1970年1月1日以来经过的毫秒数转换为NSDate,而不丢失毫秒数。每种解决方案都说用毫秒除以1000,然后使用DateWithTimeIntervalsIn1970。但是我想将保留时间也保留为毫秒。日期与时间间隔1970的参数是NSTimeInterval,它不是一个整数值(它是一个双精度)。没有理由损失毫秒。只是在除法时不要使用整数 例如: long long milliseconds = 1576058147753; NSTimeInterval seconds = (NSTim

我想将自1970年1月1日以来经过的毫秒数转换为NSDate,而不丢失毫秒数。每种解决方案都说用毫秒除以1000,然后使用DateWithTimeIntervalsIn1970。但是我想将保留时间也保留为毫秒。

日期与时间间隔1970的参数是
NSTimeInterval
,它不是一个整数值(它是一个
双精度
)。没有理由损失毫秒。只是在除法时不要使用整数

例如:

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毫秒是存在的。

您可以通过这种方式获取日期。您必须根据需要传递时间间隔和日期格式

-(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;
}

希望这能对您有所帮助。

请详细说明或编写一些代码。这个函数总是会丢失毫秒,毫秒总是+0000,您的答案是错误的。@Kira-这根本不是真的。您会损失µ秒,但不会损失毫秒。毫秒肯定不总是零。例如,1576058147.753的
NSTimeInterval
生成日期
2019-12-11T09:55:47.753Z
(注意毫秒)。如果您有毫秒为零的代码,那么问题就在于其他地方。或者,如果您只是打印日期,并在末尾看到一个
+0000
,那就是时区,而不是毫秒。更改为包含毫秒的格式化程序。你说得对!我错过了微秒,但不是毫秒。