Làm thế nào để có được thời gian và ngày hiện tại trong C ++?


457

Có cách nào đa nền tảng để có được ngày giờ hiện tại trong C ++ không?


2
Nếu Ockonal vẫn còn hoạt động, anh ta nên thay đổi câu trả lời được chấp nhận cho phương pháp C ++ 11. Câu hỏi này dường như vẫn nhận được rất nhiều lượt xem.
JSQuareD


3
@JSQuareD Ngay cả khi nhìn vào câu hỏi này bây giờ sau tất cả thời gian này, tôi thấy cách tiếp cận C tốt hơn bằng cách sử dụng tmcấu trúc. Không phải cách tiếp cận C ++ 11 chỉ đưa ra dấu thời gian unix (thời gian kể từ thời đại) mặc dù câu hỏi là về việc lấy ngày và giờ?
anddero

Ồ, câu hỏi này có 1.110.886 lượt xem! Mọi người thực sự yêu thích C ++!
Người dùng123

Câu trả lời:


595

Trong C ++ 11 bạn có thể sử dụng std::chrono::system_clock::now()

Ví dụ (được sao chép từ 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";
}

Điều này sẽ in một cái gì đó như thế này:

finished computation at Mon Oct  2 00:59:08 2017
elapsed time: 1.88232s

28
Điều này nên được nâng cấp bởi vì đó là cách dễ dàng và di động nhất trong C ++ hiện tại.
Julian

4
@Johannes, chỉ cần thêm của tôi. Với tốc độ này, đây sẽ là câu trả lời hàng đầu vào ngày 15 tháng 8 năm 2017, 16:31 UTC :-)
Martin Broadhurst

62
Câu trả lời này được sử dụng rất ít mà không có ví dụ về việc sử dụng giá trị thu được. Ví dụ: làm thế nào bạn có thể in nó, lấy giờ địa phương, so sánh với ngày / giờ khác?
Steed

32
Đây là câu trả lời tồi tệ nhất có thể. Nó làm cho các câu trả lời c ++ 11 khác bị trùng lặp, nhưng nó không giải thích được gì, chỉ là "liên kết duy nhất".
v010dya

10
Không có cách nào để đi đến điểm hơn câu trả lời này. OP đã hỏi "Có cách nào đa nền tảng để có được ngày và giờ hiện tại trong C ++ không?" Câu hỏi này cung cấp cho bạn chính xác điều này. Nếu bạn nghi ngờ về cách lấy stringtừ streamhoặc định dạng đúng a time_point<>, hãy tiếp tục và đặt câu hỏi khác hoặc google sau nó.
Tarc

482

C ++ chia sẻ các chức năng ngày / giờ của nó với C. Cấu trúc tm có lẽ là dễ nhất để lập trình viên C ++ làm việc với - các bản in sau đây ngày hôm nay:

#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";
}

26
Sử dụng ctime()cùng với câu trả lời này nếu bạn muốn một chuỗi ngày.
ralphtheninja

3
Còn việc xóa ví dụ struct tmthì có thể gọi xóa trên đó không?
Petr

4
@Petr bạn chỉ cần gọi xóa trên bộ nhớ được cấp phát mới.
iheanyi

4
ok nhưng bạn vẫn nhận được một con trỏ từ localtime () để thể hiện cấu trúc được phân bổ trên heap hay không? có nghĩa là nó không được làm sạch trừ khi bạn làm điều đó bằng cách nào đó. Tôi chưa bao giờ nói sử dụng delete(từ khóa c ++) trên đó, tôi chỉ nghĩ rằng nó nên được xóa bằng cách nào đó :) hoặc ai sẽ làm điều đó cho bạn?
Petr

9
@Petr Bạn không cần phải phân bổ nó vì nó được phân bổ tĩnh, xem tại đây để biết chủ đề này stackoverflow.com/questions/8694365/
Kẻ

180

Bạn có thể thử mã đa nền tảng sau đây để có được ngày / giờ hiện tại:

#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
}

Đầu ra:

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

Vui lòng truy cập vào đây để biết thêm thông tin về định dạng ngày / giờ


Xin chào. Tôi có một vấn đề nhỏ với phân bổ "buf" này bên trong hàm "currentDateTime ()". Làm thế nào để duy trì sau khi chức năng đã trở lại? Cám ơn.
Léa Massiot

7
Kiểu trả về là "const std :: string", do đó, nó được trả về theo giá trị và sau đó một bản sao của bộ đệm được tạo ra, trước khi phát hành nó.
barranquero

3
Tại sao trả lại constgiá trị? Điều đó là vô mục đích.
Các cuộc đua nhẹ nhàng trong quỹ đạo

cộng 1 cho giải pháp đa nền tảng!
Ziagl

139

thư viện std C cung cấp time(). Đây là vài giây từ kỷ nguyên và có thể được chuyển đổi thành ngày và H:M:Ssử dụng các chức năng C tiêu chuẩn. Boost cũng có một thư viện thời gian / ngày mà bạn có thể kiểm tra.

time_t  timev;
time(&timev);

24
Câu trả lời của anon dưới đây có cấu trúc tốt hơn và cung cấp một ví dụ tốt hơn.
MDTech.us_MAN

2
Ngoài ra, anh ta hỏi về C ++ chứ không phải C.
jterm

2
@jterm ok, C và C ++ chia sẻ cùng một thư viện thời gian chính xác, đó là vấn đề của các tên nhập khác nhau và đó là
Joseph Farah

31

thư viện chuẩn C ++ không cung cấp loại ngày thích hợp. C ++ kế thừa các cấu trúc và chức năng để thao tác ngày và giờ từ C, cùng với một vài hàm đầu vào và đầu ra ngày / giờ có tính đến nội địa hóa.

// 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;
}

25

Câu trả lời mới cho một câu hỏi cũ:

Câu hỏi không chỉ định trong múi giờ nào. Có hai khả năng hợp lý:

  1. Trong UTC.
  2. Trong múi giờ địa phương của máy tính.

Đối với 1, bạn có thể sử dụng thư viện ngày này và chương trình sau:

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

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

Mà chỉ là đầu ra cho tôi:

2015-08-18 22:08:18.944211

Thư viện ngày về cơ bản chỉ cần thêm một toán tử phát trực tuyến cho std::chrono::system_clock::time_point. Nó cũng bổ sung rất nhiều chức năng hay khác, nhưng điều đó không được sử dụng trong chương trình đơn giản này.

Nếu bạn thích 2 (giờ địa phương), có một thư viện múi giờ được xây dựng trên đầu thư viện ngày . Cả hai thư viện này đều là mã nguồn mởđa nền tảng , giả sử trình biên dịch hỗ trợ C ++ 11 hoặc 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';
}

Mà đối với tôi chỉ là đầu ra:

2015-08-18 18:08:18.944211 EDT

Loại kết quả từ make_zonedlà một date::zoned_timemà là một cặp đôi của một date::time_zonevà một std::chrono::system_clock::time_point. Cặp này đại diện cho giờ địa phương, nhưng cũng có thể đại diện cho UTC, tùy thuộc vào cách bạn truy vấn nó.

Với đầu ra ở trên, bạn có thể thấy rằng máy tính của tôi hiện đang ở múi giờ với độ lệch UTC là -4h và viết tắt là EDT.

Nếu một số múi giờ khác là mong muốn, điều đó cũng có thể được thực hiện. Ví dụ: để tìm thời gian hiện tại ở Sydney, Úc, chỉ cần thay đổi cấu trúc của biến localthành:

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

Và đầu ra thay đổi thành:

2015-08-19 08:08:18.944211 AEST

Cập nhật cho C ++ 20

Thư viện này hiện được áp dụng chủ yếu cho C ++ 20. Không gian tên dateđã biến mất và mọi thứ đều nằm trong không gian tên std::chrono. Và sử dụng zoned_timethay thế make_time. Thả các tiêu đề "date.h""tz.h"và chỉ cần sử dụng <chrono>.

Khi tôi viết điều này, việc triển khai một phần mới bắt đầu xuất hiện trên một số nền tảng.


Không nên localtimecho tôi thời gian trong múi giờ của tôi?
Jonathan Mee

Có, gần nhưlocaltime sẽ luôn cung cấp cho bạn thời gian trong múi giờ địa phương của bạn đến độ chính xác thứ hai. Đôi khi nó sẽ thất bại vì các vấn đề an toàn chủ đề, và nó sẽ không bao giờ hoạt động cho độ chính xác thứ hai.
Howard Hinnant

19

(Dành cho các nhân viên của Google)

Ngoài ra còn có 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();

16
auto time = std::time(nullptr);
std::cout << std::put_time(std::localtime(&time), "%F %T%z"); // ISO 8601 format.

Nhận thời gian hiện tại bằng cách sử dụng std::time()hoặc std::chrono::system_clock::now()(hoặc loại đồng hồ khác ).

std::put_time()(C ++ 11) và strftime()(C) cung cấp rất nhiều trình định dạng để xuất ra những lần đó.

#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"); 
}

Trình tự của các trình định dạng có vấn đề:

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

Các định dạng strftime()tương tự nhau:

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
}

Thông thường, trình định dạng viết hoa có nghĩa là "phiên bản đầy đủ" và chữ thường có nghĩa là viết tắt (ví dụ: Y: 2017, y: 17).


Cài đặt ngôn ngữ thay đổi đầu ra:

#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");        
}

Đầu ra có thể ( 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

Tôi đã sử dụng std::gmtime()để chuyển đổi sang UTC. std::localtime()được cung cấp để chuyển đổi sang giờ địa phương.

Lưu ý rằng asctime()/ ctime()đã được đề cập trong các câu trả lời khác được đánh dấu là không dùng nữa và strftime()nên được ưu tiên.


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;
} 

12

Có và bạn có thể làm như vậy với các quy tắc định dạng được chỉ định bởi miền địa phương hiện tại:

#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");
}

Đầu ra: Fri Sep 6 20:33:31 2013


1
Đây là IMHO, thực sự là câu trả lời hay nhất, vì đây là câu trả lời duy nhất tôn vinh các thiết lập ngôn ngữ và bởi vì nó được lập trình với sự chú ý đến từng chi tiết như vậy (bạn không thấy ostream::sentryđiều đó thường xuyên).
DevSolar

@DevSolar Cảm ơn. Tôi sẽ không nói nó là tốt nhất mặc dù. Tôi đã thấy triển khai tốt hơn. Nhưng tôi nghĩ điều này đủ cho một ví dụ :)
0x499602D2

Không biên dịch cho tôi. Là một người mới tôi không thể bình luận tại sao.
lịch sử

8

bạn có thể sử dụng lớp thời gian 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;
     }

đưa ra:

2017-08-25 12:30:08

6

Luôn có __TIMESTAMP__macro tiền xử lý.

#include <iostream>

using namespace std

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

int main() {
    printBuildDateTime();
}

ví dụ: CN ngày 13 tháng 4 11:28:08 2014


27
Điều này sẽ không hoạt động vì TIMESTAMP sẽ đưa ra thời gian khi tệp được tạo thay vì thời gian hiện tại.
feelfree

3
Nhìn lại, tôi không biết tại sao tôi cảm thấy được trang bị để trả lời câu hỏi C ++
James Robert Albert

1
__TIMESTAMP__là một macro tiền xử lý mở rộng đến thời điểm hiện tại (tại thời gian biên dịch) ở dạng Ddd Mmm Ngày hh :: mm :: ss yyyy. Các __TIMESTAMP__vĩ mô có thể được sử dụng để cung cấp thông tin về thời điểm cụ thể một số nhị phân được xây dựng. Tham khảo: cprogramming.com/reference/pre Processor / _TIMESTAMP__.html
selfboot

4

Bạn cũng có thể trực tiếp sử dụng 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;
} 

4
trong VS2012 tôi phải thêm #define _CRT_SECURE_NO_DEPRECATEtrước khi đưa vào để biên dịch chương trình
javapowered

4

Tôi thấy liên kết này khá hữu ích cho việc triển khai của mình: Ngày và giờ C ++

Đây là mã tôi sử dụng trong quá trình triển khai của mình, để có được định dạng đầu ra "YYYYMMDD HHMMSS" rõ ràng. Thông số trong là để chuyển đổi giữa UTC và giờ địa phương. Bạn có thể dễ dàng sửa đổi mã của tôi để phù hợp với nhu cầu của bạn.

#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();
}

Đầu ra (UTC, EST):

20161123 000454
20161122 190454

Tại sao bạn hỏi nếu ptmNow->tm_day < 9và không <10?
STF

Tôi muốn một ngày (giả sử ngày X) nhỏ hơn 9 là 0X (tức là 1 -> 01, 9 -> 09) để lấp đầy không gian, để phù hợp với thiết kế của chúng tôi. Ngày 10 có thể chỉ đơn giản là 10 trong chuỗi.
Joe

Vì vậy, bạn cần phải hỏi nếu đó là <=9vì bạn muốn bao gồm cả 9.
STF

Lưu ý tôi có một 1+trong mã. Ngày / Tháng bắt đầu từ 0.
Joe

tháng bắt đầu từ 0, nhưng ngày bắt đầu từ 1!
STF

3

Điều này hoạt động với G ++ Tôi không chắc chắn nếu điều này giúp bạn. Đầu ra chương trình:

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.

Mã số:

#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;  
}

Đây là một ví dụ tốt, nhưng dòng 'strftime (buf, sizeof (buf), "% H:% M:% S% P", & tstruct);' phải có% P được chuyển đổi thành% p (cái mới nhất là tiêu chuẩn, chữ hoa thường gây ra một khẳng định trong MSVC 2015).
Fernando Gonzalez Sanchez

3

Điều này được biên dịch cho tôi trên Linux (RHEL) và Windows (x64) nhắm mục tiêu g ++ và 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;
}

3

Bạn có thể sử dụng đoạn mã sau để lấy ngàygiờ hệ thống hiện tại trong 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: Truy cập trang web này để biết thêm thông tin.


2

Các ffead-cpp cung cấp nhiều lớp tiện ích cho các nhiệm vụ khác nhau, một lớp như vậy là ngày lớp mà cung cấp rất nhiều tính năng ngay từ hoạt động ngày cho đến nay số học, cũng có một hẹn giờ lớp cung cấp cho các hoạt động thời gian. Bạn có thể có một cái nhìn tương tự.


2

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

Tích hợp này dường như cung cấp một bộ tùy chọn hợp lý.


1
Chắc chắn: time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo); Điều này đặc biệt chỉ đặt HH: MM: SS. Bài viết đầu tiên của tôi vì vậy tôi không chắc làm thế nào để có được định dạng mã chính xác. Xin lỗi vì điều đó.
bduhbya

1

phiên bản 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;
} 

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;
}

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)

}

5
Câu hỏi yêu cầu đa nền tảng. Windows.h là dành riêng cho Windows và void mainthậm chí không phải là C / C ++ tiêu chuẩn.
derpface

0

Bạn có thể sử dụng 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();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.