# Day-first vs month-first dates

How to tell a day-first date such as 31/01/2024 from a month-first one such as 01/31/2024, with slashes or dashes: the field over 12, what to do when no field is, and the rules finetype uses.

Page: <https://meridian.online/docs/projects/finetype/types/told-apart/day-first-month-first>

## The types

| Type | Key | Form | Pattern | DuckDB transform | Sample |
| --- | --- | --- | --- | --- | --- |
| [DMY Date (slash-separated)](https://meridian.online/docs/projects/finetype/types/datetime/date/dmy_slash) | `datetime.date.dmy_slash` | Day first, slashes | `^\d{2}/\d{2}/\d{4}$` | `strptime({col}, '%d/%m/%Y')::DATE` | `15/01/2024` |
| [MDY Date (slash-separated)](https://meridian.online/docs/projects/finetype/types/datetime/date/mdy_slash) | `datetime.date.mdy_slash` | Month first, slashes | `^\d{2}/\d{2}/\d{4}$` | `strptime({col}, '%m/%d/%Y')::DATE` | `01/15/2024` |
| [DMY Date (dash-separated)](https://meridian.online/docs/projects/finetype/types/datetime/date/dmy_dash) | `datetime.date.dmy_dash` | Day first, dashes | `^\d{2}-\d{2}-\d{4}$` | `strptime({col}, '%d-%m-%Y')::DATE` | `15-01-2024` |
| [MDY Date (dash-separated)](https://meridian.online/docs/projects/finetype/types/datetime/date/mdy_dash) | `datetime.date.mdy_dash` | Month first, dashes | `^\d{2}-\d{2}-\d{4}$` | `strptime({col}, '%m-%d-%Y')::DATE` | `01-15-2024` |

## How finetype tells them apart

From finetype 0.6.66's source.

finetype's datetime format reader treats two digits, a slash, two digits, a slash and four digits as one shape that is either dmy\_slash or mdy\_slash, and the same shape with dashes as either dmy\_dash or mdy\_dash.[[1]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L340-L368) It counts a value towards that shape only when both two-digit fields are between 1 and 31 and the year is between 1000 and 9999.[[2]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L76-L78)[[3]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L381-L388) A value whose first field is over 12 and whose second is 12 or under is evidence that the day comes first, and a value with those fields the other way round is evidence that the month comes first.[[4]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L389-L394) The reader names a type only when at least 95% of the column's sampled non-null values fit the shape and all of the evidence points one way.[[5]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L46-L47)[[6]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L396-L401) When no value has a field over 12, or some values point each way, the reader returns nothing; finetype's source says it never guesses the locale.[[7]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L340-L343)[[8]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L399-L404)

finetype applies the reader's choice only when at least 90% of the column's non-empty sampled values pass the chosen type's own validation rule.[[9]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L2064-L2075)[[10]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L461-L484) Earlier in the same pipeline, a value rule takes a column finetype's model has labelled dmy\_slash or mdy\_slash and changes the label to dmy\_slash when some value's first field is over 12 and no value's second field is, or to mdy\_slash the other way round.[[11]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L1370-L1388)[[12]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/value_sharpen.rs#L71-L77)[[13]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/value_sharpen/datetime_rules.rs#L181-L211) When neither field ever goes over 12, or both do, that rule leaves the model's label as it was, and when the reader returns nothing the reader's step leaves the column's type as it was too.[[14]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/value_sharpen/datetime_rules.rs#L207-L210)[[15]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L2052-L2055)

finetype's own tests pin 31/01/2020 with 05/06/2019 as dmy\_slash, 01/31/2020 with 06/05/2019 as mdy\_slash, and both 01/02/2020 with 03/04/2019 and 31/01/2020 with 01/31/2020 as read by neither.[[16]](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L637-L665)

A column in which no day is over 12 cannot be settled from its values, so its order has to come from whoever wrote the file, its documentation or its country of origin. (Meridian's view)

## What finetype's evaluation shows

The evaluation report in finetype's repository at release 0.6.66 measured release 0.6.60 on 2026-09-23.[[17]](https://github.com/meridian-online/finetype/blob/v0.6.66/eval/eval_output/report.md#L1-L5) The report says its tables are generated by a separate tool that has drifted from the SQL harness it claims to mirror, and that a figure taken from it for publication must be its SQL headline.[[18]](https://github.com/meridian-online/finetype/blob/v0.6.66/eval/eval_output/report.md#L7) Until finetype publishes a measurement for each type, this page gives no figure for how often it mistakes one order for the other. (Meridian's view)

## Who writes each form

### [Day first, slashes](https://meridian.online/docs/projects/finetype/types/datetime/date/dmy_slash)

In the United Kingdom, dates are traditionally and most commonly written in day–month–year order.[[19]](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_United_Kingdom) The Australian Government Style Manual says to separate the numbers in a numeric date with an unspaced forward slash, using the format day/month/year.[[20]](https://www.stylemanual.gov.au/grammar-punctuation-and-conventions/numbers-and-measurements/dates-and-time) In the Unicode CLDR locale data, the short date pattern for British English (en-GB) is dd/MM/y.[[21]](https://raw.githubusercontent.com/unicode-org/cldr-json/main/cldr-json/cldr-dates-full/main/en-GB/ca-gregorian.json) The UK Trade Tariff service's monthly exchange rate file for January 2024 writes its Start date and End date columns as 01/01/2024 and 31/01/2024.[[22]](https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_2024-1.csv)

### [Month first, slashes](https://meridian.online/docs/projects/finetype/types/datetime/date/mdy_slash)

In the United States, dates are traditionally written in month-day-year order, with neither increasing nor decreasing order of significance.[[23]](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_United_States) In SQL Server, CONVERT style 101 is labelled U.S. and produces MM/dd/yyyy.[[24]](https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver17) Python's documentation gives 08/16/1988 as the en\_US example of %x, the locale's appropriate date representation.[[25]](https://docs.python.org/3/library/datetime.html) The U.S. Department of the Treasury's Daily Treasury Par Yield Curve Rates table writes its dates as month/day/year with slashes, such as 12/31/2024.[[26]](https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=2024)

### [Day first, dashes](https://meridian.online/docs/projects/finetype/types/datetime/date/dmy_dash)

The Netherlands records dates in day–month–year order, with 31-12-1999 given as an example.[[27]](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_Netherlands) Unicode's CLDR gives Dutch (nl) the short Gregorian date pattern dd-MM-y.[[28]](https://raw.githubusercontent.com/unicode-org/cldr-json/main/cldr-json/cldr-dates-full/main/nl/ca-gregorian.json) In India, DD-MM-YYYY and DD/MM/YYYY are described as the two predominant short forms of the Gregorian date.[[29]](https://en.wikipedia.org/wiki/Date_and_time_notation_in_India) StatsWales's SW3 publishing platform accepts DD-MM-YYYY in data tables, with 01-01-2022 shown on the website as 1 January 2022.[[30]](https://publisher.stats.gov.wales/en-GB/guidance/Data-preparation-‐-New-datasets)

### [Month first, dashes](https://meridian.online/docs/projects/finetype/types/datetime/date/mdy_dash)

Microsoft SQL Server's CONVERT function lists style 110, under the standard USA, as MM-dd-yyyy.[[31]](https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql) According to Wikipedia, the hyphen and the period have also emerged as separators in the all-numeric American date recently, due to globalisation.[[23]](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_United_States)

## Sources

1. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L340-L368) — FineType
2. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L76-L78) — FineType
3. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L381-L388) — FineType
4. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L389-L394) — FineType
5. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L46-L47) — FineType
6. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L396-L401) — FineType
7. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L340-L343) — FineType
8. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L399-L404) — FineType
9. [finetype 0.6.66, column/mod.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L2064-L2075) — FineType
10. [finetype 0.6.66, column/mod.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L461-L484) — FineType
11. [finetype 0.6.66, column/mod.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L1370-L1388) — FineType
12. [finetype 0.6.66, value\_sharpen.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/value_sharpen.rs#L71-L77) — FineType
13. [finetype 0.6.66, datetime\_rules.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/value_sharpen/datetime_rules.rs#L181-L211) — FineType
14. [finetype 0.6.66, datetime\_rules.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/value_sharpen/datetime_rules.rs#L207-L210) — FineType
15. [finetype 0.6.66, column/mod.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-model/src/column/mod.rs#L2052-L2055) — FineType
16. [finetype 0.6.66, datetime\_format.rs](https://github.com/meridian-online/finetype/blob/v0.6.66/crates/finetype-core/src/datetime_format.rs#L637-L665) — FineType
17. [finetype evaluation report (release 0.6.60)](https://github.com/meridian-online/finetype/blob/v0.6.66/eval/eval_output/report.md#L1-L5) — FineType
18. [finetype evaluation report (release 0.6.60)](https://github.com/meridian-online/finetype/blob/v0.6.66/eval/eval_output/report.md#L7) — FineType
19. [Date and time notation in the United Kingdom](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_United_Kingdom) — secondary source
20. [Dates and time \| Style Manual](https://www.stylemanual.gov.au/grammar-punctuation-and-conventions/numbers-and-measurements/dates-and-time) — organisation
21. [ca-gregorian.json (en-GB)](https://raw.githubusercontent.com/unicode-org/cldr-json/main/cldr-json/cldr-dates-full/main/en-GB/ca-gregorian.json) — documentation
22. [monthly\_csv\_2024-1.csv](https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_2024-1.csv) — dataset
23. [Date and time notation in the United States](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_United_States) — secondary source
24. [CAST and CONVERT (Transact-SQL) - SQL Server \| Microsoft Learn](https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver17) — documentation
25. [datetime — Basic date and time types](https://docs.python.org/3/library/datetime.html) — documentation
26. [Daily Treasury Rates \| U.S. Department of the Treasury](https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=2024) — dataset
27. [Date and time notation in the Netherlands](https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_Netherlands) — secondary source
28. [ca-gregorian.json](https://raw.githubusercontent.com/unicode-org/cldr-json/main/cldr-json/cldr-dates-full/main/nl/ca-gregorian.json) — documentation
29. [Date and time notation in India](https://en.wikipedia.org/wiki/Date_and_time_notation_in_India) — secondary source
30. [Data preparation: New datasets \| StatsWales](https://publisher.stats.gov.wales/en-GB/guidance/Data-preparation-‐-New-datasets) — organisation
31. [CAST and CONVERT (Transact-SQL) - SQL Server \| Microsoft Learn](https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql) — documentation
