Bất kỳ ai có thể cho tôi một ý tưởng làm thế nào để có được ngày hiện tại trong mili giây?
Bất kỳ ai có thể cho tôi một ý tưởng làm thế nào để có được ngày hiện tại trong mili giây?
Câu trả lời:
Có một số cách để làm điều này, mặc dù yêu thích của cá nhân tôi là:
CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();
Bạn có thể đọc thêm về phương pháp này tại đây . Bạn cũng có thể tạo một đối tượng NSDate và lấy thời gian bằng cách gọi timeIntervalSince1970 trả về giây kể từ ngày 1/1/1970:
NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];
Và trong Swift:
let timeInSeconds: TimeInterval = Date().timeIntervalSince1970
CFAbsoluteTimeGetCurrent()
trả về thời gian liên quan đến ngày tham chiếu Jan 1 2001 00:00:00 GMT
. Không phải ngày tham chiếu được đưa ra trong câu hỏi, nhưng hãy lưu ý rằng đây không phải là dấu thời gian UNIX.
Truyền trực tiếp NSTimeInterval đến một khoảng thời gian dài bị tràn đối với tôi, vì vậy thay vào đó tôi phải truyền đến một khoảng thời gian dài.
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
Kết quả là một dấu thời gian 13 chữ số như trong Unix.
timeIntervalSince1970
phương pháp thực hiện trở lại tại giây trên toàn bộ số, tuy nhiên nó là một double
mà cũng bao gồm các phân đoạn thứ hai cũng có thể được chuyển đổi sang số học mili giây. Do đó, các nhân bằng 1000.
long long
? ngôn ngữ này thật kỳ lạ
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()
}
}
Bạn chỉ có thể làm điều này:
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
điều này sẽ trả về một giá trị trong mili giây, vì vậy nếu bạn nhân giá trị kết quả với 1000 (như Eimantas của tôi đề xuất), bạn sẽ làm tràn kiểu long và nó sẽ dẫn đến giá trị âm.
Ví dụ: nếu tôi chạy mã đó ngay bây giờ, nó sẽ dẫn đến
currentTime = 1357234941
và
currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
@JavaZava giải pháp của bạn là tốt, nhưng nếu bạn muốn có giá trị dài 13 chữ số để phù hợp với định dạng dấu thời gian trong Java hoặc JavaScript (và các ngôn ngữ khác), hãy sử dụng phương pháp này:
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;
hoặc (nếu bạn cần một chuỗi):
NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];
Như đã đề cập trước đây, [[NSDate date] timeIntervalSince1970] trả về NSTimeInterval, là khoảng thời gian tính bằng giây, không phải mili giây.
Bạn có thể truy cập https://currentmillis.com/ để xem cách bạn có thể sử dụng ngôn ngữ mà bạn mong muốn. Đây là danh sách -
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
Đối với mục tiêu CI đã làm một cái gì đó như dưới đây để in nó -
long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
NSLog(@"Current date %lld", mills);
Hy vọng điều này sẽ giúp.
Bạn có thể sử dụng các phương pháp sau để lấy ngày hiện tại tính bằng mili giây.
[[NSDate date] timeIntervalSince1970];
HOẶC LÀ
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;
}
Sử dụng tùy chọn này để tính thời gian tính bằng mili giây (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.