Ngày và giờ
MQL5 cung cấp một kiểu đặc biệt để lưu trữ dữ liệu thời gian datetime
. Theo tên của nó, các giá trị của datetime
bao gồm cả ngày và giờ. Tuy nhiên, khi cần thiết, chúng có thể chỉ chứa ngày hoặc chỉ thời gian trong ngày.
Các giá trị kiểu này có thể được sử dụng trong các chương trình để theo dõi các sự kiện, chẳng hạn như giờ giao dịch, ấn phẩm tin tức hoặc thời gian chờ để tạm thời vô hiệu hóa giao dịch EA sau các giao dịch xấu.
Kích thước datetime
trong bộ nhớ là 8 byte. Biểu diễn dữ liệu bên trong hoàn toàn giống với kiểu ulong
, vì số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 được lưu trữ bên trong. Ngày tối đa được hỗ trợ là ngày 31 tháng 12 năm 3000.
Các hằng số datetime
được ghi lại dưới dạng chuỗi ký tự được đặt trong dấu ngoặc đơn, trước đó là ký tự D
. Có 6 trường được phân bổ bên trong chuỗi, với các số cho tất cả các thành phần của ngày và giờ theo các định dạng sau:
D'DD.MM.YYYY HH:mm:ss'
D'DD.MM.YYYY HH:mm:ss'
2
Ở đây, YYYY
có nghĩa là năm, tháng MM
, ngày DD
, giờ HH
, phút mm
và giây ss
. Bạn có thể bỏ qua ngày hoặc giờ. Cũng có thể không chỉ định giây hoặc phút bằng giây.
Đối với giá trị ngày tối đa được phép, một hằng số đặc biệt, DATETIME_MAX
, được cung cấp trong MQL5, bằng với giá trị số nguyên 0x793406fff
, tương ứng với D"3000.12.31 23:59:59"
.
Các ví dụ về việc ghi lại các giá trị của kiểu datetime được hiển thị trong tệp MQL5/Scripts/MQL5Book/p2/TypeDateTime.mq5
.
void OnStart()
{
// WARNINGS: invalid date
datetime blank = D''; // blank = day of compilation
datetime noday = D'15:45:00'; // noday = day of compilation + 15:45
datetime feb30 = D'2021.02.30'; // feb30 = 2021.03.02 00:00:00
datetime mon22 = D'2021.22.01'; // mon22 = 2022.10.01 00:00:00
// OK
datetime dt0 = 0; // 1970.01.01 00:00:00
datetime all = D'2021.01.01 10:10:30'; // 2021.01.01 10:10:30
datetime day = D'2025.12.12 12'; // 2025.12.12 12:00:00
}
2
3
4
5
6
7
8
9
10
11
12
Bốn biến đầu tiên gọi trình biên dịch cảnh báo về ngày không chính xác. Trong trường hợp blank
, giá trị thực tế hoàn toàn trống. Trong biến noday
, không có ngày nào cả. Trong cả hai trường hợp, trình biên dịch thay thế ngày biên dịch trong hằng số. Các biến feb30
và mon22
chứa các số ngày và tháng không chính xác. Trình biên dịch tự động sửa chúng, chuyển phần tràn vào trường bậc cao hơn (ngày 30 tháng 2 chuyển thành ngày 2 tháng 3, trong khi tháng thứ 22 trở thành tháng thứ 10 của năm tiếp theo). Tuy nhiên, bạn nên luôn loại bỏ các cảnh báo.
Biến dt0
thể hiện việc khởi tạo giá trị datetime
bằng một số nguyên.
Kiểu datetime
hỗ trợ tập hợp các phép toán vốn có trong số nguyên (xem Biểu thức ). Ví dụ, điều này cho phép thêm một lượng giây được xác định trước vào thời gian (lấy một thời điểm trong tương lai) hoặc tính toán sự khác biệt giữa các ngày.