현재 날짜를 밀리 초 단위로 가져옵니다.


답변:


103

이 작업을 수행하는 방법에는 여러 가지가 있지만 개인적으로 좋아하는 것은 다음과 같습니다.

CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();

이 방법에 대한 자세한 내용은 여기에서 읽을 수 있습니다 . NSDate 객체를 생성하고 1970 년 1 월 1 일 이후 의 를 반환 하는 timeIntervalSince1970 을 호출하여 시간을 가져올 수도 있습니다 .

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은 typedefed 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

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 네, 맞습니다. 나는 나중에 그것을 알아 냈습니다
Danpe

2
long long? 이 랭은 너무 이상해
user924

@ user924 더 이상 동의 할 수 없습니다. 그것이 내가 그것을 쓰는 것을 중단 한 이유입니다. ;)
wileymab

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

@Eimantas, 내가 % f를 사용하려고 할 때 ... 응답 시간 = 1306494959011.239014 응답 시간 = 1306494910724.744141 ms이면 위의 시간이 한 시간 이상입니다.
siva

현재 날짜는 1970 년 이후의 시간 간격 (초)입니다. 참조 날짜에 대해서는 언급하지 않았습니다.
Eimantas

나는 현재 날짜 시간 간격 만 취합니다
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]);

이것은 en milliseconds 값을 반환하므로 결과 값에 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

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);

이것이 도움이됩니다.


1

Cconvert의 NSTimeInterval milisecondedDate가치 nsstring와에 그 변환 후 int.



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

밀리 초 단위로 시간을 얻으려면 이것을 사용하십시오 (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]).


0

날짜를 연장하는 것이 아마도 가장 좋은 방법 일 것입니다.

extension NSDate {
    func msFromEpoch() -> Double {
        return self.timeIntervalSince1970 * 1000
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.