Skip to content

Commit 677e329

Browse files
committed
Define the API for building a date-based format
1 parent 4c962ce commit 677e329

File tree

2 files changed

+399
-0
lines changed

2 files changed

+399
-0
lines changed

core/common/src/format/DateTimeFormatBuilder.kt

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package kotlinx.datetime.format
77

8+
import kotlinx.datetime.*
9+
import kotlinx.datetime.internal.*
810
import kotlinx.datetime.internal.format.*
911

1012
/**
@@ -18,6 +20,82 @@ public sealed interface DateTimeFormatBuilder {
1820
* and when parsing, the string is expected to be present in the input verbatim.
1921
*/
2022
public fun chars(value: String)
23+
24+
/**
25+
* Functions specific to the date-time format builders containing the local-date fields.
26+
*/
27+
public sealed interface WithDate : DateTimeFormatBuilder {
28+
/**
29+
* A year number.
30+
*
31+
* By default, for years [-9999..9999], it's formatted as a decimal number, zero-padded to four digits, though
32+
* this padding can be disabled or changed to space padding by passing [padding].
33+
* For years outside this range, it's formatted as a decimal number with a leading sign, so the year 12345
34+
* is formatted as "+12345".
35+
*/
36+
public fun year(padding: Padding = Padding.ZERO)
37+
38+
/**
39+
* The last two digits of the ISO year.
40+
*
41+
* [baseYear] is the base year for the two-digit year.
42+
* For example, if [baseYear] is 1960, then this format correctly works with years [1960..2059].
43+
*
44+
* On formatting, when given a year in the valid range, it returns the last two digits of the year,
45+
* so 1993 becomes "93". When given a year outside the valid range, it returns the full year number
46+
* with a leading sign, so 1850 becomes "+1850", and -200 becomes "-200".
47+
*
48+
* On parsing, it accepts either a two-digit year or a full year number with a leading sign.
49+
* When given a two-digit year, it returns a year in the valid range, so "93" becomes 1993,
50+
* and when given a full year number with a leading sign, it parses the full year number,
51+
* so "+1850" becomes 1850.
52+
*/
53+
public fun yearTwoDigits(baseYear: Int)
54+
55+
/**
56+
* A month-of-year number, from 1 to 12.
57+
*
58+
* By default, it's padded with zeros to two digits. This can be changed by passing [padding].
59+
*/
60+
public fun monthNumber(padding: Padding = Padding.ZERO)
61+
62+
/**
63+
* A month name (for example, "January").
64+
*
65+
* Example:
66+
* ```
67+
* monthName(MonthNames.ENGLISH_FULL)
68+
* ```
69+
*/
70+
public fun monthName(names: MonthNames)
71+
72+
/**
73+
* A day-of-month number, from 1 to 31.
74+
*
75+
* By default, it's padded with zeros to two digits. This can be changed by passing [padding].
76+
*/
77+
public fun dayOfMonth(padding: Padding = Padding.ZERO)
78+
79+
/**
80+
* A day-of-week name (for example, "Thursday").
81+
*
82+
* Example:
83+
* ```
84+
* dayOfWeek(DayOfWeekNames.ENGLISH_FULL)
85+
* ```
86+
*/
87+
public fun dayOfWeek(names: DayOfWeekNames)
88+
89+
/**
90+
* An existing [DateTimeFormat] for the date part.
91+
*
92+
* Example:
93+
* ```
94+
* date(LocalDate.Formats.ISO)
95+
* ```
96+
*/
97+
public fun date(format: DateTimeFormat<LocalDate>)
98+
}
2199
}
22100

23101
/**

0 commit comments

Comments
 (0)