首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ localtime 轉 System::DateTime 存入資料庫

     編輯:程式設計綜合問答

`localtime()` 回傳 `struct tm*` (年份從 1900 起算、月份 0-11),轉 `System::DateTime` (C++/CLI) 需手動映射欄位。

轉換函數

using namespace System;

DateTime ConvertLocaltimeToDateTime(const tm* localTime) {
    if (!localTime) return DateTime::MinValue;
    return DateTime(
        localTime->tm_year + 1900,  // 年
        localTime->tm_mon + 1,      // 月 (1-12)
        localTime->tm_mday,         // 日
        localTime->tm_hour,         // 時
        localTime->tm_min,          // 分
        localTime->tm_sec           // 秒
    );
}

// 使用範例
time_t raw = time(nullptr);
tm* local = localtime(&raw);
DateTime dt = ConvertLocaltimeToDateTime(local);
// 寫入資料庫 (參數化查詢)
cmd->Parameters->AddWithValue("@dt", dt);

若 localtime 為 time_t (秒數 since 1970)

DateTime dt = DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind::Utc)
                .AddSeconds(static_cast<double>(raw))
                .ToLocalTime(); // 或保持 UTC 存儲

注意點

  • `localtime` 非執行緒安全,多執行緒環境用 `localtime_s` (C11) 或 `std::localtime` 配合鎖。
  • 資料庫建議存 DATETIME2 (SQL Server) / TIMESTAMP WITH TIME ZONE (PostgreSQL) 保留時區資訊。
  • C++/CLI 專案若大量互操作,考慮封裝 `DateTimeUtils` 靜態類別集中處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved