parse Iso(text: string) - > Result<Date, string>- Модуль
- std.
date → - Получатель
- Неприменимо
- Минимальное число аргументов
- 1
- Максимальное число аргументов
- 1
Declaration and parameters
СсылкаДоступность
Включено по умолчанию · Не определено
Import std.date in language mode 5.21.
The current compiler selects std/date.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.
Получатель
Ограничения параметров
Date.parseIso accepts exactly ten ASCII characters in the form YYYY-MM-DD. The year has four digits and the month and day each have two digits. Hyphens occur after the year and month.
The components must form a valid Gregorian date in the same range as Date.fromYmd. Valid text returns Ok containing that date. Invalid grammar or an invalid calendar date returns Err containing a descriptive nonempty string.
Parsing does not trim whitespace or normalize another spelling. Signs, omitted zero padding, alternate separators, non ASCII digits, timestamps, time zones, and extra characters are rejected.
Date.toIso returns exactly the same ten character form using ASCII digits and zero padding. It has no locale or time zone parameter and leaves the receiver unchanged.
Parsing the formatted text recovers the original date. Formatting accepted input returns that same text. Date.fromYmd and Date.parseIso establish the same component and range invariants.
The receiver or argument is evaluated once before the operation. These operations do not change the input or perform external effects. Error strings have no stable machine readable format.
Связанное правило · Exchange dates in one fixed ISO form →Результат
The declared result type is Result<Date, string>.
Эффекты
Ошибки
Result and effects
СсылкаFixed width ASCII text and the shared Gregorian range are required. Malformed text or an invalid date returns Err.
Resolved contracts
СсылкаRelated entries
СсылкаExchange dates in one fixed ISO form
СсылкаExchange dates in one fixed ISO form
Date.parseIso accepts exactly ten ASCII characters in the form YYYY-MM-DD. The year has four digits and the month and day each have two digits. Hyphens occur after the year and month.
The components must form a valid Gregorian date in the same range as Date.fromYmd. Valid text returns Ok containing that date. Invalid grammar or an invalid calendar date returns Err containing a descriptive nonempty string.
Parsing does not trim whitespace or normalize another spelling. Signs, omitted zero padding, alternate separators, non ASCII digits, timestamps, time zones, and extra characters are rejected.
Date.toIso returns exactly the same ten character form using ASCII digits and zero padding. It has no locale or time zone parameter and leaves the receiver unchanged.
Parsing the formatted text recovers the original date. Formatting accepted input returns that same text. Date.fromYmd and Date.parseIso establish the same component and range invariants.
The receiver or argument is evaluated once before the operation. These operations do not change the input or perform external effects. Error strings have no stable machine readable format.
Причина
One fixed calendar format makes date text predictable to store, compare lexically, and exchange. Sharing validation with component construction prevents two constructors from assigning different meanings to the same date.
Parse canonical date text and preserve its components
Ссылкаimport std.date { Date }import std.testimport std.iofor text in (["0001-01-01", "1582-10-10", "2000-02-29", "9999-12-31"]) {let date = test.assertOk(Date.parseIso(text))io.writeLine(date.toIso())}let leap = test.assertOk(Date.parseIso("2000-02-29"))io.writeLine("{leap.year()} {leap.month()} {leap.day()}")
0001-01-01
1582-10-10
2000-02-29
9999-12-31
2000 2 29
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
0001-01-011582-10-102000-02-299999-12-312000 2 29
Reject alternate spellings and invalid calendar dates
Ссылкаimport std.date { Date }import std.iofor text in (["", "2024-2-09", "2024-02-9", "2024/02/09", " 2024-02-09", "2024-02-09 ", "2024-02-09T00:00:00Z", "+2024-02-09", "2024-02-09", "2024-02-30", "1900-02-29", "10000-01-01"]) {match (Date.parseIso(text)) {case Err(_) => io.writeLine("rejected")case Ok(_) => io.writeLine("accepted")}}
rejected
rejected
rejected
rejected
rejected
rejected
rejected
rejected
rejected
rejected
rejected
rejected
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
rejectedrejectedrejectedrejectedrejectedrejectedrejectedrejectedrejectedrejectedrejectedrejected
Reject year zero in ISO text
Ссылкаimport std.date { Date }import std.iomatch (Date.parseIso("0000-01-01")) {case Err(_) => io.writeLine("year zero rejected")case Ok(_) => io.writeLine("accepted")}
year zero rejected
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
year zero rejected