Apakah ada cara lintas platform untuk mendapatkan tanggal dan waktu saat ini di C ++?
c++
date
time
cross-platform
Max Frai
sumber
sumber
tm
struktur. Bukankah pendekatan C ++ 11 hanya memberikan cap waktu unix (waktu sejak zaman) meskipun pertanyaannya adalah tentang mendapatkan tanggal dan waktu?Jawaban:
Di C ++ 11 Anda dapat menggunakan
std::chrono::system_clock::now()
Contoh (disalin dari en.cppreference.com ):
Ini akan mencetak sesuatu seperti ini:
sumber
string
daristream
, atau cara memformat dengan benartime_point<>
, silakan dan ajukan pertanyaan lain atau google setelahnya.C ++ membagikan fungsi tanggal / waktu dengan C. Struktur tm mungkin yang paling mudah digunakan oleh seorang programmer C ++ - berikut ini adalah tanggal hari ini:
sumber
ctime()
bersama dengan jawaban ini jika Anda menginginkan string tanggal.struct tm
apakah mungkin untuk memanggil delete saja?delete
(c ++ kata kunci) di atasnya, saya hanya berpikir itu harus dihapus entah bagaimana :) atau siapa yang akan melakukannya untuk Anda?Anda dapat mencoba kode lintas platform berikut untuk mendapatkan tanggal / waktu saat ini:
Keluaran:
Silakan kunjungi di sini untuk informasi lebih lanjut tentang format tanggal / waktu
sumber
const
nilai? Itu tanpa tujuan.std C menyediakan perpustakaan
time()
. Ini adalah detik dari zaman dan dapat dikonversi ke tanggal danH:M:S
menggunakan fungsi C standar. Boost juga memiliki perpustakaan waktu / tanggal yang dapat Anda periksa.sumber
pustaka standar C ++ tidak memberikan tipe tanggal yang tepat. C ++ mewarisi struct dan fungsi untuk manipulasi tanggal dan waktu dari C, bersama dengan beberapa fungsi input dan output tanggal / waktu yang memperhitungkan lokalisasi akun.
sumber
Jawaban baru untuk pertanyaan lama:
Pertanyaannya tidak menentukan di zona waktu apa. Ada dua kemungkinan yang masuk akal:
Untuk 1, Anda dapat menggunakan perpustakaan tanggal ini dan program berikut:
Yang hanya menghasilkan bagi saya:
Pustaka tanggal pada dasarnya hanya menambahkan operator streaming untuk
std::chrono::system_clock::time_point
. Ini juga menambahkan banyak fungsi bagus lainnya, tetapi itu tidak digunakan dalam program sederhana ini.Jika Anda lebih suka 2 (waktu setempat), ada perpustakaan zona waktu yang dibangun di atas perpustakaan tanggal . Kedua pustaka ini adalah open source dan cross platform , dengan asumsi kompiler mendukung C ++ 11 atau C ++ 14.
Yang bagi saya hanya keluaran:
Jenis hasil dari
make_zoned
adalahdate::zoned_time
yang merupakan pasangan dari adate::time_zone
dan astd::chrono::system_clock::time_point
. Pasangan ini mewakili waktu lokal, tetapi juga bisa mewakili UTC, tergantung pada bagaimana Anda menanyakannya.Dengan output di atas, Anda dapat melihat bahwa komputer saya saat ini berada di zona waktu dengan offset UTC -4j, dan singkatan dari EDT.
Jika beberapa zona waktu lain diinginkan, itu juga dapat dicapai. Misalnya untuk mencari waktu saat ini di Sydney, Australia hanya mengubah konstruksi variabel
local
menjadi:Dan output berubah menjadi:
Pembaruan untuk C ++ 20
Perpustakaan ini sekarang sebagian besar diadopsi untuk C ++ 20. Namespace
date
hilang dan semuanya ada dalam namespacestd::chrono
sekarang. Dan gunakanzoned_time
di tempatmake_time
. Jatuhkan tajuk"date.h"
dan"tz.h"
dan gunakan saja<chrono>
.Ketika saya menulis ini, implementasi parsial baru mulai muncul pada beberapa platform.
sumber
localtime
memberi saya waktu di zona waktu saya?localtime
akan hampir selalu memberikan waktu dalam zona waktu lokal Anda untuk presisi kedua. Kadang-kadang itu akan gagal karena masalah keamanan threads, dan itu tidak akan pernah bekerja untuk presisi subsecond.(Untuk sesama orang Google)
Ada juga Boost :: date_time :
sumber
Dapatkan waktu saat ini baik menggunakan
std::time()
ataustd::chrono::system_clock::now()
(atau jenis jam lain ).std::put_time()
(C ++ 11) danstrftime()
(C) menawarkan banyak format untuk menampilkan waktu itu.Urutan formatters penting:
Formatters
strftime()
serupa:Seringkali, formatter kapital berarti "versi lengkap" dan huruf kecil berarti singkatan (mis. Y: 2017, y: 17).
Pengaturan lokal mengubah output:
Kemungkinan hasil ( Coliru , Compiler Explorer ):
Saya telah menggunakan
std::gmtime()
konversi ke UTC.std::localtime()
disediakan untuk dikonversi ke waktu setempat.Perhatikan bahwa
asctime()
/ctime()
yang disebutkan dalam jawaban lain ditandai sudah ditinggalkan sekarang danstrftime()
harus lebih disukai.sumber
sumber
Ya dan Anda dapat melakukannya dengan aturan pemformatan yang ditentukan oleh lokal yang saat ini diimbuhi:
sumber
ostream::sentry
sering melihatnya ).Anda bisa menggunakan kelas waktu C ++ 11:
Keluarkan:
sumber
Selalu ada
__TIMESTAMP__
makro preprosesor.contoh: Sun 13 Apr 11:28:08 2014
sumber
__TIMESTAMP__
adalah makro preprosesor yang mengembang ke waktu saat ini (pada waktu kompilasi) dalam bentuk Ddd Mmm Tanggal hh :: mm :: ss yyyy. The__TIMESTAMP__
makro dapat digunakan untuk memberikan informasi tentang momen tertentu biner dibangun. Merujuk: cprogramming.com/reference/preprocessor/__TIMESTAMP__.htmlAnda juga dapat langsung menggunakan
ctime()
:sumber
#define _CRT_SECURE_NO_DEPRECATE
sebelum memasukkan untuk membuat kompilasi programSaya menemukan tautan ini cukup berguna untuk implementasi saya: C ++ Tanggal dan Waktu
Inilah kode yang saya gunakan dalam implementasi saya, untuk mendapatkan format output "YYYYMMDD HHMMSS" yang jelas. Param in adalah untuk beralih antara UTC dan waktu lokal. Anda dapat dengan mudah mengubah kode saya sesuai kebutuhan Anda.
Output (UTC, EST):
sumber
ptmNow->tm_day < 9
dan bukan<10
?<=9
karena Anda ingin memasukkan juga 9.1+
dalam kode. Hari / Bulan dimulai pukul 0.Ini berfungsi dengan G ++ Saya tidak yakin apakah ini membantu Anda. Output program:
Kode:
sumber
Ini dikompilasi untuk saya di Linux (RHEL) dan Windows (x64) yang menargetkan g ++ dan OpenMP:
sumber
Anda dapat menggunakan kode berikut untuk mendapatkan tanggal dan waktu sistem saat ini di C ++ :
PS: Kunjungi situs ini untuk informasi lebih lanjut.
sumber
The ffead-cpp menyediakan beberapa kelas utilitas untuk berbagai tugas, satu kelas tersebut adalah Tanggal kelas yang menyediakan banyak fitur yang tepat dari operasi Tanggal to date aritmatika, ada juga Timer kelas yang disediakan untuk operasi waktu. Anda dapat melihatnya secara bersamaan.
sumber
http://www.cplusplus.com/reference/ctime/strftime/
Built-in ini tampaknya menawarkan serangkaian opsi yang masuk akal.
sumber
time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo);
Yang satu ini hanya menempatkan HH: MM: SS. Posting pertama saya jadi saya tidak yakin bagaimana cara mendapatkan format kode yang benar. Maaf soal itu.versi localtime_s ():
sumber
sumber
sumber
void main
bahkan bukan standar C / C ++.Anda bisa menggunakan
boost
:sumber