如何将NSDate转换为unix时间戳iphone sdk?

neh*_*eha 143 iphone nsdate unix-timestamp ios

如何将转换NSDate为Unix时间戳?我读了很多相反的帖子.但我找不到任何与我的问题相关的内容.

BAn*_*ski 268

我相信这是你正在寻找的NSDate的选择器:

- (NSTimeInterval)timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)

  • 得到一个字符串(28/11/2011 14:14:13 < - > 1322486053):[NSString stringWithFormat:@"%.0f",[aDate timeIntervalSince1970]]; (26认同)
  • 如果提供nsdate,是否会返回unix时间戳? (2认同)
  • 该方法通常在设备上设置的时间改变.我做了一个测试,我在下午12点得到时间戳然后在iPad上的时间改变到晚上8点左右,这两个数字的差异非常高.如果时间戳不依赖于设备时间,那么数字应该只有几秒钟,但在这种情况下,我必须得出结论,iPad上的时间确实会影响unixTimeStamp (2认同)

pro*_*rmr 69

Unix时间戳是因为00:00:00 UTC 1970年1月1日,它是由式所代表的秒数time_t的,它通常是一个带符号的32位整数类型(长或INT).

iOS 为NSDate对象提供了- (NSTimeInterval)timeIntervalSince1970,它返回自1970年1月1日格林威治标准时间00:00:00以来的秒数.NSTimeInterval是一个双浮点类型,因此您可以获得秒和分数秒.

由于它们都具有相同的引用(午夜1Jan1970 UTC)并且都在几秒内转换很容易,将NSTimeInterval转换为time_t,根据您的需要进行舍入或截断:

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
Run Code Online (Sandbox Code Playgroud)

  • 您的系统时间是在当地时区显示的时间,这很好.Unix时间戳不是本地时间,它始终是UTC时间,它在印度相差+5:30,从这里相差-7:00.那是对的. (7认同)

Pet*_*Put 26

您可以通过以下方式从日期创建unix时间戳日期:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的,timeIntervalSince1970返回一个实际上是double的TimeInterval. (20认同)

Vic*_*cky 9

- (void)GetCurrentTimeStamp
    {
        NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
        [objDateformat setDateFormat:@"yyyy-MM-dd"];
        NSString    *strTime = [objDateformat stringFromDate:[NSDate date]];
        NSString    *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
        NSDate *objUTCDate  = [objDateformat dateFromString:strUTCTime];
        long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);

        NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds];
        NSLog(@"The Timestamp is = %@",strTimestamp);
    }

 - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate  *objDate    = [dateFormatter dateFromString:IN_strLocalTime];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        NSString *strDateTime   = [dateFormatter stringFromDate:objDate];
        return strDateTime;
    }
Run Code Online (Sandbox Code Playgroud)

注意: - 时间戳必须是UTC区域,因此我将本地时间转换为UTC时间.


Sur*_*gch 6

迅速

针对Swift 3进行了更新

// current date and time
let someDate = Date()

// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)

笔记


aah*_*ali 5

如果要将这些时间存储在数据库中或通过服务器发送...最好是使用Unix时间戳.这是一个小小的代码片段:

+ (NSTimeInterval)getUTCFormateDate{

    NSDateComponents *comps = [[NSCalendar currentCalendar] 
                               components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit 
                               fromDate:[NSDate date]];
    [comps setHour:0];
    [comps setMinute:0];    
    [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];

    return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];  
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 5

我首选的方法是:

NSDate.date.timeIntervalSince1970;
Run Code Online (Sandbox Code Playgroud)


Tap*_*ker 5

根据@kexik的建议,使用 UNIX 时间函数如下:

  time_t result = time(NULL);
  NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
Run Code Online (Sandbox Code Playgroud)

根据我的经验 - 不要使用 timeIntervalSince1970 ,它给出纪元时间戳 - 落后于 GMT 的秒数。

[[NSDate date]timeIntervalSince1970] 曾经有一个错误,它曾经根据手机的时区添加/减去时间,但现在似乎已解决。