ios 以毫秒为单位获取当前日期

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6150422/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 20:06:53  来源:igfitidea点击:

Get current date in milliseconds

objective-ccocoa-touchiosdatetime

提问by siva

Can any one give me an idea how to get the current date in milliseconds?

谁能告诉我如何以毫秒为单位获取当前日期?

回答by Pawel

There are several ways of doing this, although my personal favorite is:

有几种方法可以做到这一点,尽管我个人最喜欢的是:

CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();

You can read more about this method here. You can also create a NSDate object and get time by calling timeIntervalSince1970which returns the secondssince 1/1/1970:

您可以在此处阅读有关此方法的更多信息。您还可以创建一个 NSDate 对象并通过调用timeIntervalSince1970获取时间,它返回自 1/1/1970 以来的秒数

NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];

And in Swift:

在 Swift 中:

let timeInSeconds: TimeInterval = Date().timeIntervalSince1970

回答by wileymab

Casting the NSTimeInterval directly to a long overflowed for me, so instead I had to cast to a long long.

将 NSTimeInterval 直接转换为 long 对我来说溢出了,所以我不得不转换为 long long。

long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);

The result is a 13 digit timestamp as in Unix.

结果是 Unix 中的 13 位时间戳。

回答by Eimantas

NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);

回答by Siamaster

extension NSDate {

    func toMillis() -> NSNumber {
        return NSNumber(longLong:Int64(timeIntervalSince1970 * 1000))
    }

    static func fromMillis(millis: NSNumber?) -> NSDate? {
        return millis.map() { number in NSDate(timeIntervalSince1970: Double(number) / 1000)}
    }

    static func currentTimeInMillis() -> NSNumber {
        return NSDate().toMillis()
    }
}

回答by JavaZava

You can just do this:

你可以这样做:

long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);

this will return a value en milliseconds, so if you multiply the resulting value by 1000 (as suggested my Eimantas) you'll overflow the long type and it'll result in a negative value.

这将返回一个毫秒值,因此如果将结果值乘以 1000(如我的 Eimantas 建议的那样),您将溢出 long 类型并导致负值。

For example, if I run that code right now, it'll result in

例如,如果我现在运行该代码,它将导致

currentTime = 1357234941

and

currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207

回答by Itai Hanski

@JavaZava your solution is good, but if you want to have a 13 digit long value to be consistent with the time stamp formatting in Java or JavaScript (and other languages) use this method:

@JavaZava 您的解决方案很好,但是如果您想要一个 13 位长的值与 Java 或 JavaScript(和其他语言)中的时间戳格式一致,请使用此方法:

NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); // returned as a double
long digits = (long)time; // this is the first 10 digits
int decimalDigits = (int)(fmod(time, 1) * 1000); // this will get the 3 missing digits
long timestamp = (digits * 1000) + decimalDigits;

or (if you need a string):

或者(如果你需要一个字符串):

NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];

回答by Aniket Thakur

As mentioned before, [[NSDate date] timeIntervalSince1970] returns an NSTimeInterval, which is a duration in seconds, not milli-seconds.

如前所述, [[NSDate date] timeIntervalSince1970] 返回一个 NSTimeInterval,这是一个以秒为单位的持续时间,而不是毫秒。

You can visit https://currentmillis.com/to see how you can get in the language you desire. Here is the list -

您可以访问https://currentmillis.com/以了解如何使用您想要的语言。这是清单——

ActionScript    (new Date()).time
C++ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()
C#.NET  DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
Clojure (System/currentTimeMillis)
Excel / Google Sheets*  = (NOW() - CELL_WITH_TIMEZONE_OFFSET_IN_HOURS/24 - DATE(1970,1,1)) * 86400000
Go / Golang time.Now().UnixNano() / 1000000
Hive*   unix_timestamp() * 1000
Java / Groovy / Kotlin  System.currentTimeMillis()
Javascript  new Date().getTime()
MySQL*  UNIX_TIMESTAMP() * 1000
Objective-C (long long)([[NSDate date] timeIntervalSince1970] * 1000.0)
OCaml   (1000.0 *. Unix.gettimeofday ())
Oracle PL/SQL*  SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL
Perl    use Time::HiRes qw(gettimeofday); print gettimeofday;
PHP round(microtime(true) * 1000)
PostgreSQL  extract(epoch FROM now()) * 1000
Python  int(round(time.time() * 1000))
Qt  QDateTime::currentMSecsSinceEpoch()
R*  as.numeric(Sys.time()) * 1000
Ruby    (Time.now.to_f * 1000).floor
Scala   val timestamp: Long = System.currentTimeMillis
SQL Server  DATEDIFF(ms, '1970-01-01 00:00:00', GETUTCDATE())
SQLite* STRFTIME('%s', 'now') * 1000
Swift*  let currentTime = NSDate().timeIntervalSince1970 * 1000
VBScript / ASP  offsetInMillis = 60000 * GetTimeZoneOffset()
WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now()) * 1000 - offsetInMillis + Timer * 1000 mod 1000

For objective C I did something like below to print it -

为了客观 CI 做了类似下面的事情来打印它 -

long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
 NSLog(@"Current date %lld", mills);

Hopw this helps.

这有帮助。

回答by vikash

Cconvert NSTimeIntervalmilisecondedDatevalue to nsstringand after that convert into int.

Cconvert NSTimeIntervalmilisecondedDatevalue to nsstringand after the convert into int.

回答by Muhammad Nabeel Arif

You can use following methods to get current date in milliseconds.

您可以使用以下方法以毫秒为单位获取当前日期。

[[NSDate date] timeIntervalSince1970];

OR

或者

double CurrentTime = CACurrentMediaTime(); 

Source: iPhone: How to get current milliseconds?

来源: iPhone:如何获得当前毫秒数?

回答by Vicky

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