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

Delphi 日期時間與字串轉換完全手冊:FormatDateTime 格式化代碼速查表

     編輯:Delphi

前言

Delphi SysUtils 單元提供豐富的日期時間轉換函數,掌握 FormatDateTime 格式化代碼是處理國際化介面、報表輸出、日誌記錄的基礎技能。

核心轉換函數分類

方向函數用途
字串 → 日期時間StrToDate / StrToDateDef / TryStrToDate僅日期部分
StrToTime / StrToTimeDef / TryStrToTime僅時間部分
StrToDateTime / StrToDateTimeDef / TryStrToDateTime日期時間完整解析
日期時間 → 字串DateToStr短日期格式 (受區域設定影響)
TimeToStr短時間格式
DateTimeToStr完整日期時間
DateTimeToString自訂格式字串輸出
通用格式化FormatDateTime最靈活,支援完整格式代碼

FormatDateTime 格式代碼完整表

代碼意義範例輸出備註
y年份 (不補零)9, 2009
yy年份兩位09
yyyy年份四位2009推薦使用
m月份 (不補零)1..12
mm月份兩位01..12
mmm月份縮寫Jan, 1月受 Locale 影響
mmmm月份全名January, 一月
d日期 (不補零)1..31
dd日期兩位01..31
ddd星期縮寫Mon, 週一
dddd星期全名Monday, 星期一
h小時 12制 (不補零)1..12
hh小時 12制 兩位01..12
H小時 24制 (不補零)0..23
HH小時 24制 兩位00..23推薦使用
n分鐘 (不補零)0..59注意:非 m
nn分鐘兩位00..59
s秒數 (不補零)0..59
ss秒數兩位00..59
z毫秒 (不補零)0..999
zzz毫秒三位000..999
t短時間格式11:22等同 TimeToStr
tt長時間格式11:22:33
am/pm上午/下午標記am, pm小寫
a/p單字母標記a, p
AM/PM大寫標記AM, PM
A/P大寫單字母A, P
/日期分隔符/對應 FormatSettings.DateSeparator
:時間分隔符:對應 FormatSettings.TimeSeparator
'text'常值字串'Year:' → Year:單引號包裹

實戰範例

uses SysUtils, DateUtils;

procedure TForm1.FormCreate(Sender: TObject);
var
  D: TDateTime;
  S: string;
  Fmt: TFormatSettings;
begin
  D := StrToDateTime('2009-5-21 11:22:33');

  // 1. 預設區域格式
  S := DateTimeToStr(D);
  ShowMessage(S); // 2009/5/21 11:22:33 (視系統設定)

  // 2. 自訂 FormatSettings (執行期切換格式)
  GetLocaleFormatSettings(GetThreadLocale, Fmt);
  Fmt.DateSeparator := '/';
  Fmt.TimeSeparator := '_';
  Fmt.ShortDateFormat := 'dd/mm/yyyy';
  Fmt.ShortTimeFormat := 'hh:nn:ss';
  S := DateTimeToStr(D, Fmt);
  ShowMessage(S); // 21/05/2009 11_22_33

  // 3. 完整自訂格式字串
  DateTimeToString(S, 'yyyy"年"m"月"d"日" h"時"n"分"s"秒"', D);
  ShowMessage(S); // 2009年5月21日 11時22分33秒

  // 4. FormatDateTime 進階用法
  S := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz', D); // 2009-05-21 11:22:33.000
  S := FormatDateTime('"Week "ww", Day "d', D);      // Week 21, Day 21
end;

常見陷阱與最佳實務

  • 分隔符硬編碼風險:不要寫 'yyyy/mm/dd',應用 'yyyy' + DateSeparator + 'mm' + DateSeparator + 'dd' 或 FormatSettings。
  • mm vs nn:m 系列為月份,n 系列為分鐘,極易混淆。
  • 兩位數年份:yy 會依據 TwoDigitYearCenturyWindow 解釋世紀,跨世紀資料請用 yyyy。
  • 執行緒安全:GetLocaleFormatSettings 取得當前執行緒 Locale,多執行緒環境下各執行緒可獨立設定。
  • 效能:大量格式化時,重複使用 TFormatSettings 實例避免重複呼叫 GetLocaleFormatSettings。

ISO 8601 / RFC 3339 標準格式

// ISO 8601 完整格式
FormatDateTime('yyyy-mm-dd"T"hh:nn:ss.zzz', Now); // 2024-01-15T14:30:45.123
// UTC 時區標記
FormatDateTime('yyyy-mm-dd"T"hh:nn:ss.zzz"Z"', UTCTime);
// 帶時區位移
FormatDateTime('yyyy-mm-dd"T"hh:nn:ss.zzz"+hh:nn"', LocalTime);

結語

FormatDateTime 是 Delphi 日期時間格式化的瑞士刀。熟記核心代碼 (yyyy, mm, dd, HH, nn, ss, zzz),善用 TFormatSettings 隔離區域設定,即能輕鬆應對多國語系介面、標準化日誌、API 資料交換等各種情境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved