Хтось може дати мені уявлення, як отримати поточну дату в мілісекундах?
Хтось може дати мені уявлення, як отримати поточну дату в мілісекундах?
Відповіді:
Є кілька способів зробити це, хоча моїм улюбленим є:
CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();
Детальніше про цей метод ви можете прочитати тут . Ви також можете створити об'єкт NSDate і отримати час, викликавши timeIntervalSince1970, який повертає секунди з 01.01.1970:
NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];
А в Свіфті:
let timeInSeconds: TimeInterval = Date().timeIntervalSince1970
CFAbsoluteTimeGetCurrent()
повертає час відносно контрольної дати Jan 1 2001 00:00:00 GMT
. Не те, щоб у питанні була вказана контрольна дата, але майте на увазі, що це не мітка часу UNIX.
Передача NSTimeInterval безпосередньо на довгий переповнений для мене, тому натомість мені довелося кидати на довгий довгий.
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
Результат - 13-значна мітка часу, як у Unix.
timeIntervalSince1970
Метод робить повернення в секундах на ціле число, однак це , double
що також включає в себе другу фракційну , а також які можуть бути арифметично перетворені в мілісекундах. Отже, множення на 1000.
long long
? ця мова така дивна
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()
}
}
Ви можете просто зробити це:
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
це поверне значення в мілісекундах, тому, якщо помножити отримане значення на 1000 (як пропонується моїм Eimantas), ви переповните довгий тип, і це призведе до негативного значення.
Наприклад, якщо я запустив цей код прямо зараз, це призведе до
currentTime = 1357234941
і
currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
@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;
або (якщо вам потрібен рядок):
NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];
Як згадувалося раніше, [[дата NSDate] 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
Для об’єктивного ДІ зробив щось подібне нижче, щоб надрукувати його -
long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
NSLog(@"Current date %lld", mills);
Хоп, це допомагає.
Ви можете використовувати наступні методи, щоб отримати поточну дату в мілісекундах.
[[NSDate date] timeIntervalSince1970];
АБО
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;
}
Використовуйте це, щоб отримати час у мілісекундах (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.