Dart package that offers support for formatting DateTime's according to the same rules as .NET does with their Format Strings.
There are some quirks: Because this package is based on both Intl and Timezone, some of the formatting available doesn't line up 1:1 with .NET. as an example, using the italian locale it
, the time separator should return .
, but instead it currently returns :
. For the most part, the mismatches are small.
Usage
Singleton
// May 8th, 2023 T 2:42:33.2332
var dtWithEmptyMilliseconds = DateTime(2023, 05, 08, 14, 42, 50, 000, 678);
// Formatting with a raw character, in multiple mode
dtWithEmptyMilliseconds.formatAsDotNET("d"); // "5/8/2023"
Multiple
// May 8th, 2023 T 2:42:33.2332
var dtWithEmptyMilliseconds = DateTime(2023, 05, 08, 14, 42, 50, 000, 678);
// Formatting with a raw character, in singleton mode
dtWithEmptyMilliseconds.formatAsDotNET("dd-MM-yy"); // "05-08-23"
Supported Tokens
When only one token is supplied, the parser enters singleton mode
, which parses specific tokens as short-hand for fully formed regular date formats:
Singleton Tokens
Token | .NET | This Dart Package | Description | Output |
---|---|---|---|---|
d | ✅ | ✅ | Short date pattern. | 2009-06-15T13:45:30 -> 6/15/2009 (en-US) |
f | ✅ | ✅ | Full date/time pattern (short time). | 2009-06-15T13:45:30 -> Monday, June 15, 2009 1:45 PM (en-US) |
F | ✅ | ✅ | Full date/time pattern (long time). | 2009-06-15T13:45:30 -> Monday, June 15, 2009 1:45:30 PM (en-US) |
g | ✅ | ✅ | General date/time pattern (short time). | 2009-06-15T13:45:30 -> 6/15/2009 1:45 PM (en-US) |
m | ✅ | ✅ | Month/day pattern. | 2009-06-15T13:45:30 -> June 15 (en-US) |
s | ✅ | ✅ | Sortable date/time pattern. | 2009-06-15T13:45:30 -> 2009-06-15T13:45:30 |
t | ✅ | ✅ | Short time pattern. | 2009-06-15T13:45:30 -> 1:45 PM (en-US) |
y | ✅ | ✅ | Year month pattern. | 2009-06-15T13:45:30 -> June 2009 (en-US) |
z | ✅ | ✅ |
Multiple Tokens
When multiple tokens are supplied, the parser will parse each token individually, allowing construction of to-order time formats:
Token | .NET | This Dart Package | Description | Output |
---|---|---|---|---|
d | ✅ | ✅ | Day of month from 0 through 31 | 2009-06-01T13:45:30 -> 01 |
dd | ✅ | ✅ | Day of month pattern from 00 through 31 | 2009-06-01T13:45:30 -> 01 |
ddd | ✅ | ✅ | Abbreviated Day of month pattern | 2009-06-15T13:45:30 -> Mon (en-US) |
dddd | ✅ | ✅ | Full day of month pattern | 2009-06-15T13:45:30 -> Monday (en-US) |
D | ✅ | ✅ | Long date pattern. | 2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US) |
f | ✅ | ✅ | Tens of seconds | 2009-06-15T13:45:30.617542 -> 6 |
ff | ✅ | ✅ | Hundreths of seconds | 2009-06-15T13:45:30.617542 -> 61 |
fff | ✅ | ✅ | The milliseconds in a date and time value. | 6/15/2009 13:45:30.617542 -> 617 |
ffff | ✅ | ✅ | The ten thousandths of a second in a date and time value. | 2009-06-15T13:45:30.617542 -> 6175 |
fffff | ✅ | ✅ | The hundred thousandths of a second in a date and time value. | 2009-06-15T13:45:30.617542 -> 61754 |
ffffff | ✅ | ✅ | The millionths of a second in a date and time value. | 2009-06-15T13:45:30.6175420 -> 617542 |
fffffff | ✅ | ✅ | The ten millionths of a second in a date and time value. | 2009-06-15T13:45:30.6175425 -> 6175425 |
F | ✅ | ✅ | If non-zero, Tens of seconds | 2009-06-15T13:45:30.617542 -> 6 2009-06-15T13:45:30.0050000 -> (no output) |
FF | ✅ | ✅ | If non-zero, Hundreths of seconds | 2009-06-15T13:45:30.617542 -> 61 2009-06-15T13:45:30.0050000 -> (no output) |
FFF | ✅ | ✅ | If non-zero, The milliseconds in a date and time value | 2009-06-15T13:45:30.617542 -> 61 2009-06-15T13:45:30.0050000 -> (no output) |
FFFF | ✅ | ✅ | If non-zero, The ten thousandths of a second in a date and time value. | 2009-06-15T13:45:30.617542 -> 617 2009-06-15T13:45:30.0050000 -> (no output) |
FFFFF | ✅ | ✅ | If non-zero, The hundred thousandths of a second in a date and time value. | 2009-06-15T13:45:30.617542 -> 6175 2009-06-15T13:45:30.0050000 -> (no output) |
FFFFFF | ✅ | ✅ | If non-zero, The millionths of a second in a date and time value. | 2009-06-15T13:45:30.617542 -> 61754 2009-06-15T13:45:30.0050000 -> (no output) |
FFFFFFF | ✅ | ✅ | If non-zero, The ten millionths of a second in a date and time value. | 2009-06-15T13:45:30.617542 -> 617542 2009-06-15T13:45:30.0050000 -> (no output) |
g | ✅ | ✅ | Period or Era | 2009-06-15T13:45:30.6170000 -> A.D. |
gg | ✅ | ✅ | Period or Era | 2009-06-15T13:45:30.6170000 -> A.D. |
G | ✅ | ✅ | General date/time pattern (long time). | 2009-06-15T13:45:30 -> 6/15/2009 1:45:30 PM (en-US) |
h | ✅ | ✅ | The hour, using a 12-hour clock from 1 to 12. | 2009-06-15T01:45:30 -> 1 2009-06-15T13:45:30 -> 1 |
hh | ✅ | ✅ | The hour, using a 12-hour clock from 01 to 12. | 2009-06-15T01:45:30 -> 01 2009-06-15T13:45:30 -> 01 |
H | ✅ | ✅ | The hour, using a 24-hour clock from 0 to 23. | 2009-06-15T01:45:30 -> 1 2009-06-15T13:45:30 -> 13 |
HH | ✅ | ✅ | The hour, using a 24-hour clock from 00 to 23 | 2009-06-15T01:45:30 -> 01 2009-06-15T13:45:30 -> 13 |
K | ✅ | ✅ | Time zone information. | 2009-06-15T13:45:30, Kind Unspecified -> (no output) 2009-06-15T13:45:30, Kind Utc -> Z 2009-06-15T13:45:30, Kind Local -> -07:00 (depends on local computer settings) |
m | ✅ | ✅ | The minute, from 0 through 59. | 2009-06-15T13:00:30 -> 0 (en-US) |
mm | ✅ | ✅ | The minute, from 00 through 59. | 2009-06-15T13:00:30 -> 00 (en-US) |
M | ✅ | ✅ | Month/day pattern. | 2009-06-15T13:45:30 -> June 15 (en-US) |
M* | ✅ | ✅ | The month, from 1 through 12. | 2009-06-15T13:45:30 -> 6 |
MM | ✅ | ✅ | The month, from 01 through 12. | 2009-06-15T13:45:30 -> 06 |
MMM | ✅ | ✅ | The abbreviated name of the month. | 2009-06-15T13:45:30 -> Jun (en-US) |
MMMM | ✅ | ✅ | The full name of the month. | 2009-06-15T13:45:30 -> June (en-US) |
o | ✅ | ✅ | round-trip date/time pattern. | 2009-06-15T13:45:30-07:00 --> 2009-06-15T13:45:30.0000000-07:00 |
O | ✅ | ✅ | round-trip date/time pattern. | 2009-06-15T13:45:30-07:00 --> 2009-06-15T13:45:30.0000000-07:00 |
r | ✅ | ✅ | RFC1123 pattern. | 2009-06-15T13:45:30 -> Mon, 15 Jun 2009 13:45:30 GMT |
R | ✅ | ✅ | RFC1123 pattern. | 2009-06-15T13:45:30 -> Mon, 15 Jun 2009 13:45:30 GMT |
s | ✅ | ✅ | The second, from 0 through 59. | 2009-06-15T13:45:09 -> 9 |
ss | ✅ | ✅ | The second, from 00 through 59. | 2009-06-15T13:45:09 -> 09 |
t | ✅ | ✅ | The first character of the AM/PM designator. | 009-06-15T13:45:30 -> P (en-US) |
tt | ✅ | ✅ | The AM/PM designator. | 009-06-15T13:45:30 -> PM (en-US) |
T | ✅ | ✅ | Long time pattern. | 2009-06-15T13:45:30 -> 1:45:30 PM (en-US) |
TT | ✅ | X | ||
u | ✅ | ✅ | Universal sortable date/time pattern. | 2009-06-15T13:45:30 -> 2009-06-15 20:45:30Z |
U | ✅ | ✅ | Universal full date/time pattern. | 2009-06-15T13:45:30 -> Monday, June 15, 2009 8:45:30 PM (en-US) |
y | ✅ | ✅ | The year, from 0 to 99. | 0001-01-01T00:00:00 -> 1 |
yy | ✅ | ✅ | The year, from 00 to 99. | 0001-01-01T00:00:00 -> 01 |
yyy | ✅ | ✅ | The year, with a minimum of three digits. | 0001-01-01T00:00:00 -> 001 |
yyyy | ✅ | ✅ | The year as a four-digit number. | 0001-01-01T00:00:00 |
yyyyy | ✅ | ✅ | The year as a five-digit number | 0001-01-01T00:00:00 -> 00001 |
Y | ✅ | ✅ | Year-Month pattern | 2009-06-15T13:45:30 -> June 2009 (en-US) |
z | ✅ | ✅ | Hours offset from UTC | 2009-06-15T13:45:30-07:00 -> -7 |
zz | ✅ | ✅ | Hours offset from UTC, with a leading zero for a single-digit value | 2009-06-15T13:45:30-07:00 -> -07 |
zzz | ✅ | ✅ | Hours and minutes offset from UTC. | 2009-06-15T13:45:30-07:00 -> -07:00 |
\ | ✅ | ✅ | Escape character | 987654 "###00#" -> #987654# |
'string' | ✅ | ✅ | Literal string delimiter | 68 "#" "degrees" -> 68 degrees |
0 | ✅ | X | Zero placeholder | 1234.5678 ("00000") -> 01235 |
# | ✅ | X | Digit placeholder | 1234.5678 ("#####") -> 1235 |
. | ✅ | X | Decimal point | 0.45678 ("0.00", en-US) -> 0.46 |
, | ✅ | X | Group separator and number scaling | 2147483647 ("##,#", en-US) -> 2,147,483,647 |
; | ✅ | X | Section separator | 0.3697 ("%#0.00", en-US) -> %36.97 |
% | ✅ | X | Percentage placeholder | 0.3697 ("%#0.00", en-US) -> %36.97 |
‰ | ✅ | X | Per mille placeholder | 0.03697 ("#0.00‰", en-US) -> 36.97‰ |
E0 | ✅ | X | Exponential notation | |
E+0 | ✅ | X | Exponential notation | |
E-0 | ✅ | X | Exponential notation | |
e0 | ✅ | X | Exponential notation | 987654 ("#0.0e0") -> 98.8e4 |
e+0 | ✅ | X | Exponential notation | 1.8901385E-16 ("0.0e+00") -> 1.9e-16 |
e-0 | ✅ | X | Exponential notation |
String Literals
Add your literal string in "quotation marks" to get a literal, unparsed string in the output:
final now = DateTime.now();
now.formatAsDotNET('dd "days"') // "15 days"
Contributing
To contribute to this library, consider contributing to the underlying Timezone, or filing issues with Intl. For changes to this actual package, visit the github at https://github.com/0xNF/dart_.netstrftime