現在の日付をミリ秒で取得します


94

現在の日付をミリ秒で取得する方法を教えてもらえますか?



現在の日付をミリ秒で言うと、どういう意味ですか?特定の日付の予想される出力の例を提供できますか?
lnafziger

回答:


103

これにはいくつかの方法がありますが、私の個人的なお気に入りは次のとおりです。

CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();

このメソッドの詳細については、こちらをご覧ください。また、NSDateオブジェクトを作成して呼び出すことで時間を得ることができますtimeIntervalSince1970返す秒を 1970年1月1日以降に:

NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];

そしてSwiftでは:

let timeInSeconds: TimeInterval = Date().timeIntervalSince1970

4
次のコードNSTimeInterval milisecondedDate =([[NSDate date] timeIntervalSince1970] * 1000);を試しています。NSLog(@ "didReceiveResponse ----%d"、milisecondedDate);
siva

2
問題はNSLogステートメントにあります。NSTimeIntervalはtypedefされたdoubleです。したがって、%dの代わりに%fを使用する必要があります。
Pawel 2013年

55
[[NSDate date] timeIntervalSince1970]は、ミリ秒ではなく秒単位の期間であるNSTimeIntervalを返します。
Erik van der Neut 2014

12
CFAbsoluteTimeGetCurrent()は、基準日からの相対的な時間を返すことに注意してくださいJan 1 2001 00:00:00 GMT。質問では参照日が指定されていませんが、これはUNIXタイムスタンプではないことに注意してください。
nyi 2014

2
[[NSDate date] timeIntervalSince1970]は、ミリ秒ではなく秒で時間を返します。
SAPLogix 2015年

61

NSTimeIntervalをlongに直接キャストすると、オーバーフローしたので、代わりにlong longにキャストする必要がありました。

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

結果は、Unixと同様に13桁のタイムスタンプです。


4
timeIntervalSince1970は間隔を秒単位で返すため、これは実際のミリ秒を返しません。したがって、必要なミリ秒の精度は得られません。
Danpe

9
timeIntervalSince1970 この方法は、しかしながら、それは、整数で秒のリターンを行いdouble、また算術ミリ秒に変換することができるだけでなく、小数秒を含むことを意味します。したがって、1000による乗算
wileymab

@wileymapうん、あなたは正しい。私は後でそれを理解しました
ダンペ

2
long long?このlangはとても奇妙です
user924

@ user924もっと同意できませんでした。だから私はそれを書きませんでした。;)
wileymab 2018年

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

次のコードNSTimeInterval milisecondedDate =([[NSDate date] timeIntervalSince1970] * 1000);を試しています。NSLog(@ "didReceiveResponse ----%d"、milisecondedDate); -しかし、負の値の値を示しています-ResponseTIMEのように---- 556610175 ResponseTIME ---- -1548754395
siva

1
%dの代わりに%fプレースホルダーを使用してみてください。それが役に立たない場合
-1000

@ Eimantas、%fを使用しようとすると...応答時間= 1306494959011.239014として時間を取得しています応答時間= 1306494910724.744141ミリ秒の場合、上記の時間は1時間以上です。
siva

現在の日付は、1970年からの秒単位の時間間隔です。参照日付については何も言及していません。
Eimantas、2011年

私は現在の日付時間間隔のみを取ります
siva

8
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()
    }
}

7

あなたはこれを行うことができます:

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

これはミリ秒単位の値を返すため、結果として得られる値に1000を掛けると(私のEimantasが示唆しているように)、long型がオーバーフローし、負の値になります。

たとえば、そのコードを今実行すると、次のようになります。

currentTime = 1357234941

そして

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

5

@JavaZavaのソリューションは優れていますが、JavaまたはJavaScript(およびその他の言語)のタイムスタンプのフォーマットと一致する13桁の長さの値が必要な場合は、次のメソッドを使用します。

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;

または(文字列が必要な場合):

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

NSString * timestampString = [NSString stringWithFormat:@ "%ld%03d"、digits、decimalDigits]; 実際は正しいです。あなたの場合、decimalDigits値が100未満の場合、誤った結果が生成されます。
PANKAJ VERMA 2018年

4

前述のように、 [[NSDate date] timeIntervalSince1970]は、ミリ秒ではなく秒単位の期間であるNSTimeIntervalを返します。

あなたは訪問することができ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

客観的なCIの場合、それを印刷するために以下のようなことをしました-

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

これは役に立ちますね。




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


0

日付の延長はおそらくそれについての最良の方法です。

extension NSDate {
    func msFromEpoch() -> Double {
        return self.timeIntervalSince1970 * 1000
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.