# Convert a string to date > Supported in: Batch, Faster, Streaming Returns the date given a formatted string in accordance to the Java DateTimeFormatter. The default formats are `yyyy-MM-dd` and `yyyy-MM-dd'T'HH:mm:ss.SSSXXX`. The formats are run in order, the first matching format will be returned. **Expression categories:** Cast, Datetime ## Declared arguments * **String:** String column to parse to date.
*Expression\* * *optional* **Formats:** Input a date format (e.g. yyyy-MM-dd or MM/dd/yyyy).
*List\>* **Output type:** *Date* ## Examples ### Example 1: Base case **Description:** Date formats are optional **Argument values:** * **String:** 2020-04-28 * **Formats:** *null* **Output:** 2020-04-28 *** ### Example 2: Base case **Description:** Date formats are optional **Argument values:** * **String:** 2020-04-28T01:00:00.000Z * **Formats:** *null* **Output:** 2020-04-28 *** ### Example 3: Base case **Description:** Dates parsed with a single format. **Argument values:** * **String:** 28-2020-04 * **Formats:** \[dd-yyyy-MM] **Output:** 2020-04-28 *** ### Example 4: Base case **Description:** Multiple formats used to parse dates **Argument values:** * **String:** 28-2020-04 * **Formats:** \[yyyy-MM-dd, dd-yyyy-MM] **Output:** 2020-04-28 *** ### Example 5: Base case **Description:** If dates are missing leading zeros, they are still parsed correctly using this "yyyy-M-d" format. **Argument values:** * **String:** `date` * **Formats:** \[yyyy-M-d] | date | **Output** | | ----- | ----- | | 2020-04-08 | 2020-04-08 | | 2020-4-8 | 2020-04-08 | | 2020-10-10 | 2020-10-10 | *** ### Example 6: Base case **Description:** Strings can contain a timestamp **Argument values:** * **String:** 28-2020-04 10:12:00 +01 * **Formats:** \[dd-yyyy-MM HH\:mm:ss X] **Output:** 2020-04-28 *** ### Example 7: Base case **Description:** Timezone can change the date. **Argument values:** * **String:** 28-2020-04 10:12:00 +11 * **Formats:** \[dd-yyyy-MM HH\:mm:ss X] **Output:** 2020-04-27 *** ### Example 8: Null case **Description:** Null columns remain null **Argument values:** * **String:** *null* * **Formats:** \[dd-yyyy-MM] **Output:** *null* *** ### Example 9: Edge case **Description:** Invalid data is parsed to null **Argument values:** * **String:** 28-20201-14 * **Formats:** \[dd-yyyy-MM] **Output:** *null* *** ### Example 10: Edge case **Description:** Incorrect formats parse everything to null **Argument values:** * **String:** 04-2020-28 * **Formats:** \[dd-yyyy-MM] **Output:** *null* *** ### Example 11: Edge case **Description:** A day-of-year format defaults the year to 1970. **Argument values:** * **String:** 300 * **Formats:** \[D] **Output:** 1970-10-27 *** ### Example 12: Edge case **Description:** A three-digit day-of-year format defaults the year to 1970. **Argument values:** * **String:** 365 * **Formats:** \[DDD] **Output:** 1970-12-31 *** ### Example 13: Edge case **Description:** A format without a year defaults the year to 1970. **Argument values:** * **String:** 12-25 * **Formats:** \[MM-dd] **Output:** 1970-12-25 *** ### Example 14: Edge case **Description:** A month-only format defaults the year to 1970 and the day to the 1st. **Argument values:** * **String:** 03 * **Formats:** \[MM] **Output:** 1970-03-01 *** ### Example 15: Edge case **Description:** A single-digit year format defaults the month to January and the day to the 1st. **Argument values:** * **String:** 1 * **Formats:** \[y] **Output:** 0001-01-01 *** ### Example 16: Edge case **Description:** A time-only format defaults the date to the Unix epoch (1970-01-01). **Argument values:** * **String:** 1 * **Formats:** \[m] **Output:** 1970-01-01 *** ### Example 17: Edge case **Description:** A two-digit year format defaults the month to January and the day to the 1st. **Argument values:** * **String:** 99 * **Formats:** \[yy] **Output:** 2099-01-01 *** ### Example 18: Edge case **Description:** A year-only format defaults the month to January and the day to the 1st. **Argument values:** * **String:** 2020 * **Formats:** \[yyyy] **Output:** 2020-01-01 ***