Làm cách nào để có thời gian hiện tại trên Linux tính bằng mili giây?Cách nhận thời gian hiện tại tính bằng mili giây từ C trong Linux?
Trả lời
Sử dụng gettimeofday()
để nhận thời gian tính bằng giây và micro giây. Kết hợp và làm tròn đến mili giây được để lại dưới dạng bài tập.
Nếu bạn đang tìm kiếm thứ gì đó để nhập vào dòng lệnh của mình, thì date +%H:%M:%S.%N
sẽ cung cấp cho bạn thời gian bằng nano giây.
Không hoàn toàn: câu hỏi được gắn thẻ 'C' và yêu cầu thời gian epoch tính bằng mili giây. – pilcrow
Bạn phải làm một cái gì đó như thế này:
struct timeval tv;
gettimeofday(&tv, NULL);
double time_in_mill =
(tv.tv_sec) * 1000 + (tv.tv_usec)/1000 ; // convert tv_sec & tv_usec to millisecond
Tiếp theo là chức năng util để có được dấu thời gian hiện tại trong mili giây:
#include <sys/time.h>
long long current_timestamp() {
struct timeval te;
gettimeofday(&te, NULL); // get current time
long long milliseconds = te.tv_sec*1000LL + te.tv_usec/1000; // calculate milliseconds
// printf("milliseconds: %lld\n", milliseconds);
return milliseconds;
}
Về múi giờ:
gettimeofday() hỗ trợ cho SPE cify múi giờ, Tôi sử dụng NULL, bỏ qua múi giờ, nhưng bạn có thể chỉ định múi giờ, nếu cần.
@Update - múi giờ
Kể từ khi long
đại diện của thời gian là không liên quan đến hoặc bị ảnh hưởng bởi bản thân múi giờ, vì vậy việc thiết tz
param của gettimeofday() là không cần thiết, vì nó đã giành 't làm cho bất kỳ sự khác biệt.
Và, theo người trang của gettimeofday()
, việc sử dụng các cấu trúc timezone
là lỗi thời, do đó lập luận tz
nên bình thường được quy định như NULL, để biết chi tiết xin vui lòng kiểm tra trang người đàn ông.
> gettimeofday() hỗ trợ để xác định múi giờ, tôi sử dụng NULL, bỏ qua múi giờ, nhưng bạn có thể chỉ định một múi giờ, nếu cần. Bạn đã sai. Múi giờ nên được giới thiệu độc quyền qua cuộc gọi đến localtime(). –
@ vitaly.v.ch Tôi đã làm một bài kiểm tra, thông qua 'tz' param của' gettimeofday() 'như' & (struct timezone tz = {480, 0}) 'sẽ không nhận được bất kỳ cảnh báo nào, và nó không ' t có bất kỳ ảnh hưởng nào đến kết quả, điều đó có ý nghĩa, vì đại diện của 'long' thời gian không liên quan đến hoặc bị ảnh hưởng bởi múi giờ, phải không? –
Không có lý do để làm bất kỳ thử nghiệm nào. Hạt nhân Linux không có thông tin thích hợp về múi giờ và đồng thời không có cách nào để cung cấp. Đó là lý do tại sao đối số tz được xử lý theo cách rất cụ thể. đại diện lâu dài không quan trọng. –
Điều này có thể đạt được bằng chức năng clock_gettime
.
Trong phiên bản hiện tại của POSIX, gettimeofday
là marked obsolete. Điều này có nghĩa là nó có thể bị xóa khỏi phiên bản tương lai của đặc tả. Người viết ứng dụng được khuyến khích sử dụng hàm clock_gettime
thay vì gettimeofday
.
Dưới đây là một ví dụ về cách sử dụng clock_gettime
:
#define _POSIX_C_SOURCE 200809L
#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
void print_current_time_with_ms (void)
{
long ms; // Milliseconds
time_t s; // Seconds
struct timespec spec;
clock_gettime(CLOCK_REALTIME, &spec);
s = spec.tv_sec;
ms = round(spec.tv_nsec/1.0e6); // Convert nanoseconds to milliseconds
if (ms > 999) {
s++;
ms = 0;
}
printf("Current time: %"PRIdMAX".%03ld seconds since the Epoch\n",
(intmax_t)s, ms);
}
Nếu mục tiêu của bạn là để đo thời gian trôi qua, và hệ thống của bạn hỗ trợ "đồng hồ đơn điệu" tùy chọn, sau đó bạn nên xem xét sử dụng CLOCK_MONOTONIC
thay vì CLOCK_REALTIME
.
+1 cho chính xác POSIXly - nhưng câu trả lời của bạn có đơn vị sai. OP không muốn thời gian _with_ mili giây, nhưng thời gian _in_ mili giây. – pilcrow
Giải pháp tốt nhưng đừng quên _-lm_ trong lệnh 'gcc' của bạn. –
theo manpage cho vòng, bạn muốn sử dụng lround khi gán kết quả cho một số nguyên (hoặc dài) – hildred
C11 timespec_get
Nó trả lên đến nano giây, được làm tròn đến việc giải quyết thực hiện.
Nó đã được triển khai trong Ubuntu 15.10. API trông giống như POSIX clock_gettime
.
#include <time.h>
struct timespec ts;
timespec_get(&ts, TIME_UTC);
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
Xem thêm chi tiết ở đây: https://stackoverflow.com/a/36095407/895245
- 1. Nhận thời gian hiện tại, tính bằng mili giây, tính bằng C?
- 2. Nhận thời gian hiện tại (tính bằng mili giây) từ đồng hồ hệ thống trong Windows?
- 3. Dấu thời gian hiện tại SQLite bằng mili giây?
- 4. Cách nhận thời gian bằng mili giây trong Android Shell?
- 5. Nhận thời gian hiện tại tính bằng giây từ Epoch trên Linux, Bash
- 6. Tính toán chênh lệch thời gian tính bằng mili giây
- 7. Cách nhận chênh lệch thời gian bằng mili giây
- 8. nhận thời gian hiện tại tính bằng giây
- 9. C# sub mili giây thời gian
- 10. Lịch Java nhận ngày hiện tại, không có giờ, phút, giây và mili giây, tính bằng mili giây
- 11. Thời gian hệ thống chrono C++ tính bằng mili giây, hoạt động thời gian
- 12. C# thời gian tính bằng micro giây
- 13. Làm thế nào để có được thời gian hiện tại trong mili giây trong C Programming
- 14. Nhận thời gian bằng mili giây bằng cách sử dụng C#
- 15. Android Nhận ngày hiện tại (với thời gian là 0: 00: 000) trong mili giây?
- 16. Làm cách nào để có thời gian trôi qua trong C tính bằng mili giây? (Windows)
- 17. Nhận thời gian tính bằng mili giây mà không cần cài đặt thêm gói?
- 18. Làm thế nào để nhận được thời gian tính bằng mili giây kể từ thời kỳ unix trong Javascript?
- 19. CURRENT_TIMESTAMP tính bằng mili giây
- 20. NSTimer Giảm thời gian bằng giây/mili giây
- 21. Chụp một thời gian trong mili giây
- 22. Mili giây cho dấu thời gian UNIX
- 23. Tìm thời gian bằng mili giây bằng Powershell?
- 24. Tính mili giây từ epoch
- 25. Xác định khoảng thời gian mili giây trong ca cao
- 26. new Date(). GetTime() không trả về dấu thời gian tính bằng mili giây
- 27. thời gian trăn (milli giây) tính
- 28. Cách xóa mili giây khỏi dấu thời gian?
- 29. Làm thế nào để thời gian một hàm tính bằng mili giây mà không tăng :: timer
- 30. Có cách nào trong XQuery để có được thời gian hiện tại tính bằng mili giây từ một số Epoch không?
Đó là phong tục trên StackOverflow để có một câu hỏi trong cơ thể của câu hỏi của bạn. – msw