__DATE__ 是一个编译时常量。这是.cpp 文件的编译日期。在这种情况下,这不是您想要的。
C++Builder 的 RTL 有一个 Sysutils::Date() 函数,您可以使用它来代替,例如:
#include <System.SysUtils.hpp>
label1->Text = _T("Data: ") + Date().DateString();
Date() 返回代表当前系统日期的TDateTime(如果您还想包含时间,请改用Sysutils::Now())。它的DateString() 方法使用用户的区域设置将TDateTime 格式化为String。如果你想自己格式化TDateTime,你可以使用它的FormatString()方法,例如:
#include <System.SysUtils.hpp>
label1->Text = _T("Data: ") + Date().FormatString(_T("yyyy-mm-dd"));
or:
label1->Text = Date().FormatString(_T("'Data: 'yyyy-mm-dd"));
如果您想要更标准的 C++ 解决方案,请查看 std::time() 和 std:::strftime() 函数,例如:
#include <ctime>
std::time_t now_c = std::time(nullptr);
std::tm now_tm = *std::localtime(&now_c);
char buffer[11] = {};
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d", &now_tm);
label1->Text = _T("Data: ") + String(buffer);
or:
label1->Text = String().sprintf(_T("Data: %s"), buffer);
或者,看看C++11中引入的<chrono>库,比如std::chrono::system_clock,例如:
#include <chrono>
#include <ctime>
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
std::tm now_tm = *std::localtime(&now_c);
char buffer[11] = {};
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d", &now_tm);
label1->Text = _T("Data: ") + String(buffer);
or:
label1->Text = String().sprintf(_T("Data: %s"), buffer);
或者:
#include <chrono>
#include <ctime>
#include <sstream>
#include <iomanip>
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
std::tm now_tm = *std::localtime(&now_c);
std::wostringstream oss;
oss << L"Data: " << std::put_time(&now_tm, L"%Y-%m-%d");
label1->Text = oss.str().c_str();