Milisaniye cinsinden güncel tarihi nasıl alacağım konusunda bana bir fikir verebilir misiniz?
Milisaniye cinsinden güncel tarihi nasıl alacağım konusunda bana bir fikir verebilir misiniz?
Yanıtlar:
Kişisel favorim olmasına rağmen, bunu yapmanın birkaç yolu var:
CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();
Bu yöntem hakkında daha fazla bilgi bulabilirsiniz burada . 1/1/1970 tarihinden beri geçen saniyeleri döndüren timeIntervalSince1970'i çağırarak da bir NSDate nesnesi oluşturabilir ve zaman elde edebilirsiniz :
NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];
Ve Swift'de:
let timeInSeconds: TimeInterval = Date().timeIntervalSince1970
CFAbsoluteTimeGetCurrent()
Referans tarihine göre zamanı döndürdüğünü unutmayın Jan 1 2001 00:00:00 GMT
. Soruda bir referans tarih belirtilmedi, ancak bunun bir UNIX zaman damgası olmadığını unutmayın.
NSTimeInterval'i doğrudan benim için uzun bir süreye çevirmek, bunun yerine uzun bir süre yapmak zorunda kaldım.
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
Sonuç, Unix'teki gibi 13 basamaklı bir zaman damgasıdır.
timeIntervalSince1970
Yöntem, bununla birlikte, bir, Bütün dizi saniye geri dönüşü double
de aritmetik olarak milisaniye dönüştürülebilir oyuk fraksiyonel ikinci kapsadığı anlamına gelir. Dolayısıyla, 1000 ile çarpma.
long long
? bu dil çok garip
NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);
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()
}
}
Sadece bunu yapabilirsiniz:
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
bu milisaniye cinsinden bir değer döndürecektir, bu nedenle elde edilen değeri 1000 ile çarparsanız (benim Eimantalarımda önerildiği gibi) uzun türü aşarsınız ve negatif bir değerle sonuçlanır.
Örneğin, şu anda bu kodu çalıştırırsam, sonuç
currentTime = 1357234941
ve
currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
@JavaZava çözümünüz iyidir, ancak Java veya JavaScript'teki (ve diğer dillerdeki) zaman damgası biçimlendirmesiyle tutarlı olması için 13 basamaklı uzun bir değere sahip olmak istiyorsanız şu yöntemi kullanın:
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;
veya (bir dizeye ihtiyacınız varsa):
NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];
Daha önce belirtildiği gibi, [[NSDate date] timeIntervalSince1970] mili saniye değil, saniye cinsinden süre olan bir NSTimeInterval döndürür.
İstediğiniz dile nasıl ulaşabileceğinizi görmek için https://currentmillis.com/ adresini ziyaret edebilirsiniz . İşte liste -
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
Objektif C için basmak için aşağıdaki gibi bir şey yaptım -
long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
NSLog(@"Current date %lld", mills);
Hopw bu yardımcı olur.
Güncel tarihi milisaniye cinsinden almak için aşağıdaki yöntemleri kullanabilirsiniz.
[[NSDate date] timeIntervalSince1970];
VEYA
double CurrentTime = CACurrentMediaTime();
- (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;
}
Zamanı milisaniye cinsinden almak için bunu kullanın (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.