Bagaimana cara mendapatkan tanggal dan waktu saat ini di C ++?

457

Apakah ada cara lintas platform untuk mendapatkan tanggal dan waktu saat ini di C ++?

Max Frai
sumber
2
Jika Ockonal masih aktif, ia harus mengubah jawaban yang diterima untuk pendekatan C ++ 11. Pertanyaan ini sepertinya masih mendapatkan banyak pandangan.
JSQuareD
2
Versi C: stackoverflow.com/questions/1442116/…
Ciro Santilli 郝海东 冠状 病 六四 六四 事件 法轮功
3
@ JSQuareD Bahkan melihat pertanyaan ini sekarang setelah sekian lama, saya menemukan pendekatan C lebih baik menggunakan tmstruktur. Bukankah pendekatan C ++ 11 hanya memberikan cap waktu unix (waktu sejak zaman) meskipun pertanyaannya adalah tentang mendapatkan tanggal dan waktu?
anddero
Wow, pertanyaan ini memiliki 1.110.886 kali dilihat! Orang-orang sangat suka C ++!
User123

Jawaban:

595

Di C ++ 11 Anda dapat menggunakan std::chrono::system_clock::now()

Contoh (disalin dari en.cppreference.com ):

#include <iostream>
#include <chrono>
#include <ctime>    

int main()
{
    auto start = std::chrono::system_clock::now();
    // Some computation here
    auto end = std::chrono::system_clock::now();

    std::chrono::duration<double> elapsed_seconds = end-start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);

    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

Ini akan mencetak sesuatu seperti ini:

finished computation at Mon Oct  2 00:59:08 2017
elapsed time: 1.88232s
Frederick The Fool
sumber
28
Ini harus di-upgrade karena ini adalah cara yang paling portabel dan mudah dalam C ++ saat ini.
Johannes
4
@ Johnannes, baru saja menambahkan milik saya. Pada tingkat ini, ini harus menjadi jawaban teratas pada 15 Agustus 2017, 16:31 UTC :-)
Martin Broadhurst
62
Jawaban ini sangat sedikit digunakan tanpa contoh menggunakan nilai yang diperoleh. Misalnya bagaimana Anda bisa mencetaknya, dapatkan waktu setempat, bandingkan dengan tanggal / waktu lainnya?
Steed
32
Ini jawaban yang paling buruk. Itu membuat c ++ 11 lainnya menjawab duplikat, namun itu tidak menjelaskan apa pun, menjadi 'tautan saja'.
v010dya
10
Tidak ada cara untuk mendapatkan lebih banyak ke titik daripada jawaban ini. OP bertanya, "Apakah ada cara lintas platform untuk mendapatkan tanggal dan waktu saat ini di C ++?" Pertanyaan ini memberi Anda persis seperti ini. Jika Anda ragu tentang cara mendapatkan stringdari stream, atau cara memformat dengan benar time_point<>, silakan dan ajukan pertanyaan lain atau google setelahnya.
Tarc
482

C ++ membagikan fungsi tanggal / waktu dengan C. Struktur tm mungkin yang paling mudah digunakan oleh seorang programmer C ++ - berikut ini adalah tanggal hari ini:

#include <ctime>
#include <iostream>

int main() {
    std::time_t t = std::time(0);   // get time now
    std::tm* now = std::localtime(&t);
    std::cout << (now->tm_year + 1900) << '-' 
         << (now->tm_mon + 1) << '-'
         <<  now->tm_mday
         << "\n";
}
milleniumbug
sumber
26
Gunakan ctime()bersama dengan jawaban ini jika Anda menginginkan string tanggal.
ralphtheninja
3
bagaimana dengan menghapus instance dari struct tmapakah mungkin untuk memanggil delete saja?
Petr
4
@Petr Anda hanya perlu memanggil delete pada memori yang dialokasikan dengan yang baru.
iheanyi
4
ok tapi tetap saja Anda mendapatkan pointer dari localtime () sehingga contoh struktur akan dialokasikan pada heap atau tidak? yang artinya tidak dibersihkan kecuali Anda melakukannya. Saya tidak pernah mengatakan menggunakan delete(c ++ kata kunci) di atasnya, saya hanya berpikir itu harus dihapus entah bagaimana :) atau siapa yang akan melakukannya untuk Anda?
Petr
9
@Petr Anda tidak perlu membatalkan alokasi karena dialokasikan secara statis, lihat di sini untuk topik ini stackoverflow.com/questions/8694365/…
Brandin
180

Anda dapat mencoba kode lintas platform berikut untuk mendapatkan tanggal / waktu saat ini:

#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>

// Get current date/time, format is YYYY-MM-DD.HH:mm:ss
const std::string currentDateTime() {
    time_t     now = time(0);
    struct tm  tstruct;
    char       buf[80];
    tstruct = *localtime(&now);
    // Visit http://en.cppreference.com/w/cpp/chrono/c/strftime
    // for more information about date/time format
    strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);

    return buf;
}

int main() {
    std::cout << "currentDateTime()=" << currentDateTime() << std::endl;
    getchar();  // wait for keyboard input
}

Keluaran:

currentDateTime()=2012-05-06.21:47:59

Silakan kunjungi di sini untuk informasi lebih lanjut tentang format tanggal / waktu

TrungTN
sumber
Halo. Saya punya sedikit masalah dengan alokasi "buf" ini di dalam fungsi "currentDateTime ()". Bagaimana seharusnya bertahan setelah fungsi kembali? Terima kasih.
Léa Massiot
7
Jenis kembali adalah "const std :: string", sehingga dikembalikan oleh nilai dan kemudian salinan buffer dibuat, sebelum melepaskannya.
barranquero
3
Mengapa mengembalikan constnilai? Itu tanpa tujuan.
Lightness Races in Orbit
plus 1 untuk solusi lintas platform!
Ziagl
139

std C menyediakan perpustakaan time(). Ini adalah detik dari zaman dan dapat dikonversi ke tanggal dan H:M:Smenggunakan fungsi C standar. Boost juga memiliki perpustakaan waktu / tanggal yang dapat Anda periksa.

time_t  timev;
time(&timev);
Martin York
sumber
24
jawaban anon di bawah ini memiliki struktur yang lebih baik dan memberikan contoh yang lebih baik.
MDTech.us_MAN
2
Juga, ia bertanya tentang C ++ bukan C.
jterm
2
@ jterm ok, C dan C ++ berbagi perpustakaan waktu yang sama persis, itu masalah nama impor yang berbeda dan hanya itu
Joseph Farah
31

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.

// Current date/time based on current system
time_t now = time(0);

// Convert now to tm struct for local timezone
tm* localtm = localtime(&now);
cout << "The local date and time is: " << asctime(localtm) << endl;

// Convert now to tm struct for UTC
tm* gmtm = gmtime(&now);
if (gmtm != NULL) {
cout << "The UTC date and time is: " << asctime(gmtm) << endl;
}
else {
cerr << "Failed to get the UTC date and time" << endl;
return EXIT_FAILURE;
}
Vaibhav Patle
sumber
25

Jawaban baru untuk pertanyaan lama:

Pertanyaannya tidak menentukan di zona waktu apa. Ada dua kemungkinan yang masuk akal:

  1. Dalam UTC.
  2. Di zona waktu lokal komputer.

Untuk 1, Anda dapat menggunakan perpustakaan tanggal ini dan program berikut:

#include "date.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    std::cout << system_clock::now() << '\n';
}

Yang hanya menghasilkan bagi saya:

2015-08-18 22:08:18.944211

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.

#include "tz.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    auto local = make_zoned(current_zone(), system_clock::now());
    std::cout << local << '\n';
}

Yang bagi saya hanya keluaran:

2015-08-18 18:08:18.944211 EDT

Jenis hasil dari make_zonedadalah date::zoned_timeyang merupakan pasangan dari a date::time_zonedan a std::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 localmenjadi:

auto local = make_zoned("Australia/Sydney", system_clock::now());

Dan output berubah menjadi:

2015-08-19 08:08:18.944211 AEST

Pembaruan untuk C ++ 20

Perpustakaan ini sekarang sebagian besar diadopsi untuk C ++ 20. Namespace datehilang dan semuanya ada dalam namespace std::chronosekarang. Dan gunakan zoned_timedi tempat make_time. Jatuhkan tajuk "date.h"dan "tz.h"dan gunakan saja <chrono>.

Ketika saya menulis ini, implementasi parsial baru mulai muncul pada beberapa platform.

Howard Hinnant
sumber
Bukankah seharusnya localtimememberi saya waktu di zona waktu saya?
Jonathan Mee
Ya, localtimeakan 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.
Howard Hinnant
19

(Untuk sesama orang Google)

Ada juga Boost :: date_time :

#include <boost/date_time/posix_time/posix_time.hpp>

boost::posix_time::ptime date_time = boost::posix_time::microsec_clock::universal_time();
Offirmo
sumber
16
auto time = std::time(nullptr);
std::cout << std::put_time(std::localtime(&time), "%F %T%z"); // ISO 8601 format.

Dapatkan waktu saat ini baik menggunakan std::time()atau std::chrono::system_clock::now()(atau jenis jam lain ).

std::put_time()(C ++ 11) dan strftime()(C) menawarkan banyak format untuk menampilkan waktu itu.

#include <iomanip>
#include <iostream>

int main() {
    auto time = std::time(nullptr);
    std::cout
        // ISO 8601: %Y-%m-%d %H:%M:%S, e.g. 2017-07-31 00:42:00+0200.
        << std::put_time(std::gmtime(&time), "%F %T%z") << '\n'
        // %m/%d/%y, e.g. 07/31/17
        << std::put_time(std::gmtime(&time), "%D"); 
}

Urutan formatters penting:

std::cout << std::put_time(std::gmtime(&time), "%c %A %Z") << std::endl;
// Mon Jul 31 00:00:42 2017 Monday GMT
std::cout << std::put_time(std::gmtime(&time), "%Z %c %A") << std::endl;
// GMT Mon Jul 31 00:00:42 2017 Monday

Formatters strftime()serupa:

char output[100];
if (std::strftime(output, sizeof(output), "%F", std::gmtime(&time))) {
    std::cout << output << '\n'; // %Y-%m-%d, e.g. 2017-07-31
}

Seringkali, formatter kapital berarti "versi lengkap" dan huruf kecil berarti singkatan (mis. Y: 2017, y: 17).


Pengaturan lokal mengubah output:

#include <iomanip>
#include <iostream>
int main() {
    auto time = std::time(nullptr);
    std::cout << "undef: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("en_US.utf8"));
    std::cout << "en_US: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("en_GB.utf8"));
    std::cout << "en_GB: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("de_DE.utf8"));
    std::cout << "de_DE: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("ja_JP.utf8"));
    std::cout << "ja_JP: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("ru_RU.utf8"));
    std::cout << "ru_RU: " << std::put_time(std::gmtime(&time), "%c");        
}

Kemungkinan hasil ( Coliru , Compiler Explorer ):

undef: Tue Aug  1 08:29:30 2017
en_US: Tue 01 Aug 2017 08:29:30 AM GMT
en_GB: Tue 01 Aug 2017 08:29:30 GMT
de_DE: Di 01 Aug 2017 08:29:30 GMT
ja_JP: 2017年08月01日 08時29分30秒
ru_RU: Вт 01 авг 2017 08:29:30

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 dan strftime()harus lebih disukai.

Roi Danton
sumber
14
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "Current local time and date: %s", asctime (timeinfo) );

  return 0;
} 
etcheve
sumber
12

Ya dan Anda dapat melakukannya dengan aturan pemformatan yang ditentukan oleh lokal yang saat ini diimbuhi:

#include <iostream>
#include <iterator>
#include <string>

class timefmt
{
public:
    timefmt(std::string fmt)
        : format(fmt) { }

    friend std::ostream& operator <<(std::ostream &, timefmt const &);

private:
    std::string format;
};

std::ostream& operator <<(std::ostream& os, timefmt const& mt)
{
    std::ostream::sentry s(os);

    if (s)
    {
        std::time_t t = std::time(0);
        std::tm const* tm = std::localtime(&t);
        std::ostreambuf_iterator<char> out(os);

        std::use_facet<std::time_put<char>>(os.getloc())
            .put(out, os, os.fill(),
                 tm, &mt.format[0], &mt.format[0] + mt.format.size());
    }

    os.width(0);

    return os;
}

int main()
{
    std::cout << timefmt("%c");
}

Keluaran: Fri Sep 6 20:33:31 2013

0x499602D2
sumber
1
Ini, IMHO, sebenarnya jawaban terbaik, karena ini adalah satu-satunya yang menghormati pengaturan lokal, dan karena diprogram dengan perhatian terhadap detail (Anda tidak ostream::sentrysering melihatnya ).
DevSolar
@DevSolar Terima kasih. Saya tidak akan mengatakan itu yang terbaik. Saya telah melihat implementasi yang lebih baik. Tapi saya pikir ini sudah cukup untuk contoh :)
0x499602D2
Tidak mengkompilasi untuk saya. Menjadi seorang pemula saya tidak bisa mengomentari mengapa.
historystamp
8

Anda bisa menggunakan kelas waktu C ++ 11:

    #include <iostream>
    #include <iomanip>
    using namespace std;

    int main() {

       time_t now = chrono::system_clock::to_time_t(chrono::system_clock::now());
       cout << put_time(localtime(&now), "%F %T") <<  endl;
      return 0;
     }

Keluarkan:

2017-08-25 12:30:08
Sam Abdul
sumber
6

Selalu ada __TIMESTAMP__makro preprosesor.

#include <iostream>

using namespace std

void printBuildDateTime () {
    cout << __TIMESTAMP__ << endl;
}

int main() {
    printBuildDateTime();
}

contoh: Sun 13 Apr 11:28:08 2014

James Robert Albert
sumber
27
Ini tidak akan berfungsi karena TIMESTAMP akan memberikan waktu ketika file dibuat daripada waktu saat ini.
merasa bebas
3
Melihat ke belakang pada hal ini, saya tidak tahu mengapa saya merasa diperlengkapi untuk menjawab pertanyaan C ++
James Robert Albert
1
__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__.html
selfboot
4

Anda juga dapat langsung menggunakan ctime():

#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  printf ( "Current local time and date: %s", ctime (&rawtime) );

  return 0;
} 
Abhishek Gupta
sumber
4
di VS2012 saya harus menambahkan #define _CRT_SECURE_NO_DEPRECATEsebelum memasukkan untuk membuat kompilasi program
javapowered
4

Saya 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.

#include <iostream>
#include <ctime>

using namespace std;

/**
 * This function gets the current date time
 * @param useLocalTime true if want to use local time, default to false (UTC)
 * @return current datetime in the format of "YYYYMMDD HHMMSS"
 */

string getCurrentDateTime(bool useLocalTime) {
    stringstream currentDateTime;
    // current date/time based on current system
    time_t ttNow = time(0);
    tm * ptmNow;

    if (useLocalTime)
        ptmNow = localtime(&ttNow);
    else
        ptmNow = gmtime(&ttNow);

    currentDateTime << 1900 + ptmNow->tm_year;

    //month
    if (ptmNow->tm_mon < 9)
        //Fill in the leading 0 if less than 10
        currentDateTime << "0" << 1 + ptmNow->tm_mon;
    else
        currentDateTime << (1 + ptmNow->tm_mon);

    //day
    if (ptmNow->tm_mday < 10)
        currentDateTime << "0" << ptmNow->tm_mday << " ";
    else
        currentDateTime <<  ptmNow->tm_mday << " ";

    //hour
    if (ptmNow->tm_hour < 10)
        currentDateTime << "0" << ptmNow->tm_hour;
    else
        currentDateTime << ptmNow->tm_hour;

    //min
    if (ptmNow->tm_min < 10)
        currentDateTime << "0" << ptmNow->tm_min;
    else
        currentDateTime << ptmNow->tm_min;

    //sec
    if (ptmNow->tm_sec < 10)
        currentDateTime << "0" << ptmNow->tm_sec;
    else
        currentDateTime << ptmNow->tm_sec;


    return currentDateTime.str();
}

Output (UTC, EST):

20161123 000454
20161122 190454
Joe
sumber
Mengapa Anda bertanya apakah itu ptmNow->tm_day < 9dan bukan <10?
STF
Saya ingin satu hari (katakanlah hari X) kurang dari 9 menjadi 0X (yaitu 1 -> 01, 9 -> 09) untuk mengisi ruang, agar sesuai dengan desain kami. Hari 10 bisa jadi 10 dalam string.
Joe
Jadi Anda perlu bertanya apakah itu <=9karena Anda ingin memasukkan juga 9.
STF
Catatan saya punya 1+dalam kode. Hari / Bulan dimulai pukul 0.
Joe
bulan mulai dari 0, tetapi hari mulai dari 1!
STF
3

Ini berfungsi dengan G ++ Saya tidak yakin apakah ini membantu Anda. Output program:

The current time is 11:43:41 am
The current date is 6-18-2015 June Wednesday 
Day of month is 17 and the Month of year is 6,
also the day of year is 167 & our Weekday is 3.
The current year is 2015.

Kode:

#include <ctime>
#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>

using namespace std;

const std::string currentTime() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%H:%M:%S %P", &tstruct);
return buf;
}

const std::string currentDate() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%B %A ", &tstruct);
return buf;
}

int main() {
    cout << "\033[2J\033[1;1H"; 
std:cout << "The current time is " << currentTime() << std::endl;
    time_t t = time(0);   // get time now
    struct tm * now = localtime( & t );
    cout << "The current date is " << now->tm_mon + 1 << '-' 
         << (now->tm_mday  + 1) << '-'
         <<  (now->tm_year + 1900) 
         << " " << currentDate() << endl; 

 cout << "Day of month is " << (now->tm_mday) 
      << " and the Month of year is " << (now->tm_mon)+1 << "," << endl;
    cout << "also the day of year is " << (now->tm_yday) 
         << " & our Weekday is " << (now->tm_wday) << "." << endl;
    cout << "The current year is " << (now->tm_year)+1900 << "." 
         << endl;
 return 0;  
}
Anonim
sumber
Ini adalah contoh yang baik, tetapi baris 'strftime (buf, sizeof (buf), "% H:% M:% S% P", & tstruct);' harus memiliki% P dikonversi menjadi% p (yang terbaru adalah standar, huruf besar menyebabkan pernyataan di MSVC 2015).
Fernando Gonzalez Sanchez
3

Ini dikompilasi untuk saya di Linux (RHEL) dan Windows (x64) yang menargetkan g ++ dan OpenMP:

#include <ctime>
#include <iostream>
#include <string>
#include <locale>

////////////////////////////////////////////////////////////////////////////////
//
//  Reports a time-stamped update to the console; format is:
//       Name: Update: Year-Month-Day_of_Month Hour:Minute:Second
//
////////////////////////////////////////////////////////////////////////////////
//
//  [string] strName  :  name of the update object
//  [string] strUpdate:  update descripton
//          
////////////////////////////////////////////////////////////////////////////////

void ReportTimeStamp(string strName, string strUpdate)
{
    try
    {
        #ifdef _WIN64
            //  Current time
            const time_t tStart = time(0);
            //  Current time structure
            struct tm tmStart;

            localtime_s(&tmStart, &tStart);

            //  Report
            cout << strName << ": " << strUpdate << ": " << (1900 + tmStart.tm_year) << "-" << tmStart.tm_mon << "-" << tmStart.tm_mday << " " << tmStart.tm_hour << ":" << tmStart.tm_min << ":" << tmStart.tm_sec << "\n\n";
        #else
            //  Current time
            const time_t tStart = time(0);
            //  Current time structure
            struct tm* tmStart;

            tmStart = localtime(&tStart);

            //  Report
            cout << strName << ": " << strUpdate << ": " << (1900 + tmStart->tm_year) << "-" << tmStart->tm_mon << "-" << tmStart->tm_mday << " " << tmStart->tm_hour << ":" << tmStart->tm_min << ":" << tmStart->tm_sec << "\n\n";
        #endif

    }
    catch (exception ex)
    {
        cout << "ERROR [ReportTimeStamp] Exception Code:  " << ex.what() << "\n";
    }

    return;
}
Epsilon3
sumber
3

Anda dapat menggunakan kode berikut untuk mendapatkan tanggal dan waktu sistem saat ini di C ++ :

    #include <iostream>
    #include <time.h> //It may be #include <ctime> or any other header file depending upon
                     // compiler or IDE you're using 
    using namespace std;

    int main() {
       // current date/time based on current system
       time_t now = time(0);

       // convert now to string form
       string dt = ctime(&now);

       cout << "The local date and time is: " << dt << endl;
    return 0;
    }

PS: Kunjungi situs ini untuk informasi lebih lanjut.

John
sumber
2

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.

pengguna775757
sumber
2

http://www.cplusplus.com/reference/ctime/strftime/

Built-in ini tampaknya menawarkan serangkaian opsi yang masuk akal.

bduhbya
sumber
1
Tentu: 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.
bduhbya
1

versi localtime_s ():

#include <stdio.h>
#include <time.h>

int main ()
{
  time_t current_time;
  struct tm  local_time;

  time ( &current_time );
  localtime_s(&local_time, &current_time);

  int Year   = local_time.tm_year + 1900;
  int Month  = local_time.tm_mon + 1;
  int Day    = local_time.tm_mday;

  int Hour   = local_time.tm_hour;
  int Min    = local_time.tm_min;
  int Sec    = local_time.tm_sec;

  return 0;
} 
sailfish009
sumber
1
#include <iostream>
#include <chrono>
#include <string>
#pragma warning(disable: 4996)
// Ver: C++ 17 
// IDE: Visual Studio
int main() {
    using namespace std; 
    using namespace chrono;
    time_point tp = system_clock::now();
    time_t tt = system_clock::to_time_t(tp);
    cout << "Current time: " << ctime(&tt) << endl;
    return 0;
}
r3t40
sumber
0
#include <Windows.h>

void main()
{
     //Following is a structure to store date / time

SYSTEMTIME SystemTime, LocalTime;

    //To get the local time

int loctime = GetLocalTime(&LocalTime);

    //To get the system time

int systime = GetSystemTime(&SystemTime)

}
pengguna3414278
sumber
5
Pertanyaannya menanyakan cross-platform. Windows.h khusus untuk Windows, dan void mainbahkan bukan standar C / C ++.
derpface
0

Anda bisa menggunakan boost:

#include <boost/date_time/gregorian/gregorian.hpp>
#include <iostream>
using namespace boost::gregorian;

int main()
{
    date d = day_clock::universal_day();
    std::cout << d.day() << " " << d.month() << " " << d.year();
}
Andreas DM
sumber