日期和時間#

PowerLanguage 有兩個日期時間,一個是 K棒的日期時間,另一個是現在電腦的日期時間

日期時間有兩種格式: DateTimeELDate/ELTimeDateTimeELDate/ELTime 格式在閱讀上並不直覺,因此 PowerLanguage 提供格式互相轉換的函數,讓 DateTimeELDate/ELTime字串數值之間能互相轉換。

格式#

DateTime#

DateTime 是一個浮點數,整數代表日期,表示從 1900/1/1 起過了多少天;小數代表時間,表示從 0:00 後過了一天的多少比例。

ELDate/ELTime#

格式說明
ELDate表示日期,YYYMMdd 格式。YYY: 從 1900 年起過了多少年。MM: 月份。dd: 幾號
ELTime表示時間,24 時制 HHmmHHmmss 格式(例: 130000 = 1:00:00 PM),根據呼叫的函數決定使用哪一種。HH: 小時。mm: 分鐘。ss: 秒

日期和時間的函數#

K棒的日期時間#

函數說明
Date回傳 K棒收盤的日期,以 ELDate YYYMMdd 格式表示。例: 2007/10/30 回傳 1071030,1999/04/02 回傳 990402
Time回傳 K棒收盤的時間,以 ELTime HHmm 格式表示。例: 10:15 AM 回傳 1015,3:45 PM 回傳 1545
Time_s回傳 K棒收盤的時間,以 ELTime HHmmss 格式表示。例: 10:15:25 AM 回傳 101525,3:45:00 PM 回傳 154500
DateTime回傳 K棒收盤的日期和時間,以 DateTime 格式表示。例: 2013/5/28 08:41:11.813 回傳 41422.74

現在電腦的日期時間#

函數說明
CurrentDate回傳現在電腦的日期,以 ELDate YYYMMdd 格式表示。例: 2008/10/30 回傳 1081030
CurrentTime回傳現在電腦的時間,以 ELTime HHmm 格式表示。例: 10:15 AM 回傳 1015,3:45 PM 回傳 1545
CurrentTime_s回傳現在電腦的時間,以 ELTime HHmmss 格式表示。例: 10:15:25 AM 回傳 101525,3:45:00 PM 回傳 154500
ComputerDateTime回傳現在電腦的日期和時間,以 DateTime 格式表示。等同 ELDateToDateTime(CurrentDate) + ELTimeToDateTime(CurrentTime)。例: 2008/1/1 6:00 AM 回傳 39448.25000000

格式的互相轉換#

下表列出各格式之間的轉換函數:

DateTimeELDate/ELTime字串數值
DateTime-DateTime -> ELTimeDateTime -> 字串DateTime -> 數值
ELDate/ELTimeELDate/ELTime -> DateTime---
字串字串 -> DateTime---
數值數值 -> DateTime---

DateTime -> ELTime#

函數說明
DateTime2ELTime(DateTime)DateTime 的小數(時間部分)轉成 ELTime HHmm 回傳。例: DateTime2ELTime(39449.65625000) 回傳 1545,表示 3:45 PM
DateTime2ELTime_s(DateTime)DateTime 的小數(時間部分)轉成 ELTime HHmmss 回傳。例: DateTime2ELTime_s(39449.646354167) 回傳 153045,表示 3:30:45 PM

ELDate/ELTime -> DateTime#

函數說明
ELDateToDateTime(YYYMMdd)ELDate YYYMMdd 轉成 DateTime 的整數(日期部分)回傳。例: ELDateToDateTime(1080101) 回傳 39448.00000000(2008/1/1)
ELTimeToDateTime(HHmm)ELTime HHmm 轉成 DateTime 的小數(時間部分)回傳。例: ELTimeToDateTime(1015) 回傳 0.42708333(10:15 AM)
ELTimeToDateTime_s(HHmmss)ELTime HHmmss 轉成 DateTime 的小數(時間部分)回傳。例: ELTimeToDateTime_s(101525) 回傳 0.427372685(10:15:25 AM)

DateTime -> 字串#

函數說明
DateTimeToString(DateTime)DateTime 的整數(日期部分)和小數(時間部分)轉成字串回傳。例: DateTimeToString(ComputerDateTime) 回傳現在電腦的日期和時間字串
DateTimeToString_ms(DateTime)DateTime 的整數(日期部分)和小數(時間部分)轉成精確到毫秒的字串回傳。例: DateTimeToString_ms(DateTime) 回傳 K棒的日期和時間字串
DateToString(DateTime)DateTime 的整數(日期部分)轉成字串回傳。例: DateToString(39448.25000000) 回傳 "1/1/2008"
TimeToString(DateTime)DateTime 的小數(時間部分)轉成字串回傳。例: TimeToString(39448.75000000) 回傳 "6:00 PM"
TimeToString_ms(DateTime)DateTime 的小數(時間部分)轉成精確到毫秒的字串回傳。例: TimeToString_ms(39448.7501) 回傳 "18:00:08.640"
FormatDate("FormatString", DateTime)DateTime 的整數(日期部分)轉成格式化字串回傳。FormatString 格式字元見日期格式字元
FormatTime("FormatString", DateTime)DateTime 的小數(時間部分)轉成格式化字串回傳。FormatString 格式字元見時間格式字元

日期格式字元(FormatDate)#

字元說明
d幾號,小於 10 不補 0
dd幾號,小於 10 補 0
ddd星期幾的三字母縮寫
dddd星期幾的全名
M月份,小於 10 不補 0
MM月份,小於 10 補 0
MMM月份的三字母縮寫
MMMM月份的全名
y年份最後兩位數,小於 10 不補 0
yy年份最後兩位數,小於 10 補 0
yyyy年份四位數

範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 回傳 "Tuesday, January 22, 2008."
FormatDate("dddd, MMMM dd, yyyy.", 39469.250);

// 回傳 "1/22/8"
FormatDate("M/d/y", 39469.250);

// 回傳 "22-01-08"
FormatDate("dd-MM-yy", 39469.250);

// 回傳 "Next Tue is: Jan 22"
FormatDate("Next ddd is: MMM dd", 39469.250);

時間格式字元(FormatTime)#

字元說明
h12 時制小時,小於 10 不補 0
hh12 時制小時,小於 10 補 0
H24 時制小時,小於 10 不補 0
HH24 時制小時,小於 10 補 0
m分鐘,小於 10 不補 0
mm分鐘,小於 10 補 0
s秒,小於 10 不補 0
ss秒,小於 10 補 0
tAM 或 PM 的單一字元
ttAM 或 PM

範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 回傳 "04:01:03 P"
FormatTime("hh:mm:ss t", 39469.6674);

// 回傳 "4 PM"
FormatTime("h tt", 39469.6674);

// 回傳 "16:01"
FormatTime("HH:mm", 39469.6674);

// 回傳 "1 MIN 3 SEC"
FormatTime("m MIN s SEC", 39469.6674);

字串 -> DateTime#

函數說明
StringToDate("MM/dd/yy")將字串 "MM/dd/yy""MM/dd/yyyy" 轉成 DateTime 的整數(日期部分)回傳。MM: 月份。dd: 幾號。yy/yyyy: 年份。例: StringToDate("04/04/99") 回傳 36254.0000000(1999/4/4)
StringToTime("hh:mm:ss tt")將字串 "hh:mm:ss tt" 轉成 DateTime 的小數(時間部分)回傳。hh: 12 時制小時。mm: 分鐘。ss: 秒。tt: AM 或 PM。例: StringToTime("08:00:00 AM") 回傳 0.33333333
StringToDateTime("MM/dd/yy hh:mm:ss tt")將字串 "MM/dd/yy hh:mm:ss tt""MM/dd/yyyy hh:mm:ss tt" 轉成 DateTime 回傳。例: StringToDateTime("04/04/99 04:48:00 PM") 回傳 36254.70000000(1999/4/4 4:48 PM)

DateTime -> 數值#

函數說明
YearFromDateTime(DateTime)回傳 DateTime 的年份數值。例: YearFromDateTime(39449.25000000) 回傳 2008
MonthFromDateTime(DateTime)回傳 DateTime 的月份數值。例: MonthFromDateTime(39600.25000000) 回傳 6(六月)
HoursFromDateTime(DateTime)回傳 DateTime 的 24 時制小時數值。例: HoursFromDateTime(39449.85000000) 回傳 20(8 PM)
MinutesFromDateTime(DateTime)回傳 DateTime 的分鐘數值。例: MinutesFromDateTime(39449.35000000) 回傳 24
SecondsFromDateTime(DateTime)回傳 DateTime 的秒數數值。例: SecondsFromDateTime(39449.35440000) 回傳 20
MillisecondsFromDateTime(DateTime)回傳 DateTime 的毫秒數值

數值 -> DateTime#

函數說明
EncodeDate(yy, MM, dd)將數值 yy(年份最後兩位)、MM(月份)、dd(幾號)轉成 DateTime 回傳。例: EncodeDate(08, 01, 01) 回傳 39448.00000000(2008/1/1)
EncodeTime(HH, mm, ss, mmm)將數值 HH(24 時制小時)、mm(分鐘)、ss(秒)、mmm(毫秒)轉成 DateTime 回傳。例: EncodeTime(16, 29, 55, 500) 回傳 0.6874479167(16:29:55.500)

範例#

在指定的日期範圍 04/08/2022~04/09/2022 內,印出 debug 用的 log(Open、High、Low、Close)到檔案。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Inputs: startDateOfLog("04/08/2022");
Inputs: endDateOfLog("04/09/2022");

Variables:
  dateStr(""), timeStr(""),
  kBarTimeStr(""), kBarDateStr(""),
  formatStr(""), filePathStr("");
Variables: isEnableLogOfDate(false);

// 日期和時間格式化
dateStr = FormatDate("yyyy-MM-dd", ComputerDateTime);
timeStr = FormatTime("HH:mm:ss", ComputerDateTime);
kBarTimeStr = FormatTime("HH:mm:ss", DateTime);
kBarDateStr = FormatDate("yyyy-MM-dd", DateTime);
formatStr = "Computer Date Time: " + dateStr + " " + timeStr
  + ", K-bar Date Time: " + kBarDateStr + " " + kBarTimeStr;

// 檔案路徑
filePathStr = "D:\MCLog\" + GetSymbolName + "_" + GetStrategyName + ".log";

// 檢查日期是否在範圍內
isEnableLogOfDate = StringToDate(startDateOfLog) <= DateTime
  and DateTime <= StringToDate(endDateOfLog);

// 在指定日期範圍內印出 debug log 到檔案
If isEnableLogOfDate Then Begin
  Print(File(filePathStr), formatStr, "** Start Log **");
  Print(File(filePathStr), ", open: ", Open, ", high: ", High, ", low: ", Low, ", close: ", Close);
End;

Reference#

https://www.multicharts.com/trading-software/index.php?title=Category:Date_and_Time_Routines

https://www.multicharts.com/trading-software/index.php?title=Category:Data_Information/General

https://www.multicharts.com/trading-software/index.php?title=Outputting_Dates_in_EasyLanguage

https://www.multicharts.com/trading-software/index.php?title=DateTimeToString_Ms

© 2026 CodeReindeer. All rights reserved.