Manipulating and formatting dates in Swift is a common task. This post presents examples for working with DateFormatter, Date, and other structs that enable parsing, formatting, and extracting components from dates and date strings.

  1. Date Formulas Cheatsheet
  2. Date Format Cheatsheet
  3. Format Date To String Using DateFormatter
    a. timeStyle
    b. dateStyle
    c. locale
    d. calendar
  4. Calendar Cheatsheet
  5. Convert String To Date
  6. Date Components
    a. Create Date From Date Components
    b. Date Components From A Date

Date Formulas Cheatsheet

Formula Output
dd.MM.yy 16.01.23
MM/dd/yyyy 01/16/2023
MM-dd-yyyy HH:mm 01-16-2023 00:10
MMM d, h:mm a Jan 16, 0:10 AM
EEEE, MMM d, yyyy Monday, Jan 16, 2023
yyyy-MM-dd’T’HH:mm:ssZ 2023-01-16T00:10:00-0600

Date Format Cheatsheet

Formula Description Example
yyyy 4-digit year 2022
yy 2-digit year 22
MM 2-digit month 01
M 1 or 2 digit month 1
dd 2-digit day of the month 02
d 1 or 2 digit day of the month 2
HH 2-digit hour (24-hour format) 13
H 1 or 2 digit hour (24-hour format) 13
hh 2-digit hour (12-hour format) 01
h 1 or 2 digit hour (12-hour format) 1
mm 2-digit minute 02
m 1 or 2 digit minute 2
ss 2-digit second 02
s 1 or 2 digit second 2
a AM/PM for 12-hour format PM

Format Date To String Using DateFormatter

The dateFormat property on DateFormatter specifies how the DateFormatter instance will parse and format dates. After setting the dateFormat to a format string, call date(from:) with a formatted date string to parse the date string to a Date:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy"
let date = dateFormatter.date(from: "01/16/2023")
print(date) // Optional(2023-01-16 00:10:00 +0000)

timeStyle

DateFormatter has another interface for specifying the time format of a date, the timeStyle property. The timeStyle property can be set to one of the following values:

Value Description
.none The time is not displayed.
.short The time is displayed in a short format, such as "0:10 AM".
.medium The time is displayed in a medium format, such as "0:10:00 AM".
.long The time is displayed in a long format, such as "0:10:00 AM EST".
.full The time is displayed in the most detailed format possible, including the time zone and seconds.
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .medium
let timeString = dateFormatter.string(from: Date())
print(timeString) // "00:10:00 AM"

dateStyle

DateFormatter also has an interface for specifying the date format of a date, the dateStyle property. The dateStyle property can be set to one of the following values:

Value Description
.none The date is not displayed.
.short The date is displayed in a short format, such as "1/16/2023".
.medium The date is displayed in a medium format, such as "Jan 16, 2023".
.long The date is displayed in a long format, such as "January 16, 2023".
.full The date is displayed in the most detailed format possible, including the weekday and era.
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
let dateString = dateFormatter.string(from: Date())
print(dateString) // "Jan 16, 2023"

locale

To control the language and region-specific information in a formatted date, use the locale property on DateFormatter.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM d, yyyy"
dateFormatter.locale = Locale(identifier: "fr_FR")
let date = dateFormatter.string(from: Date())
print(date) // "janvier 16, 2023"

To set the locale property to the user's device settings, use .autoupdatingCurrent:

dateFormatter.locale = Locale.autoupdatingCurrent

calendar

To control the calendar used to format the Date, use the calendar property on DateFormatter.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM d, yyyy"
dateFormatter.calendar = Calendar(identifier: .islamic)
let date = dateFormatter.string(from: Date())
print(date) // "Jumada II 22, 1444"

Calendar Cheatsheet

Calendar Description
gregorian The Gregorian calendar, used in most of the world.
buddhist The Buddhist calendar, used in Thailand and other countries with a Buddhist majority.
chinese The Chinese calendar, used in China and other countries with a significant Chinese population.
coptic The Coptic calendar, used in the Coptic Orthodox Church.
ethiopicAmeteAlem The Ethiopian calendar, also known as the Ethiopian Orthodox Tewahedo Church calendar.
ethiopicAmeteMihret The Ethiopian calendar, also known as the Ethiopian Orthodox Tewahedo Church calendar.
hebrew The Hebrew calendar, used in Israel and other Jewish communities.
iso8601 The ISO 8601 calendar, an international standard for date and time representation.
indian The Indian national calendar, used in India and other countries with a significant Indian population.
islamic The Islamic calendar, used in Muslim communities around the world.
islamicCivil The Islamic calendar, used in Muslim communities around the world.
japanese The Japanese calendar, used in Japan.
persian The Persian calendar, used in Iran and other countries with a significant Persian population.
roc The Republic of China calendar, used in Taiwan and other Chinese communities.

Convert String To Date

In addition to formatting dates and times, use DateFormatter to parse a String into a Date. Just like formatting dates, set dateFormat on the DateFormatter to the format of the date string. Then, call date(from:) passing in a date string to get a parsed Date:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let dateString = "2023-01-16"
let date = dateFormatter.date(from: dateString)
print(date) // Optional(2023-01-16 00:10:00 +0000)

Date Components

DateComponents is a struct that enables working with specific components of a date, like year, month, or day.

Create Date From Date Components

To create a Date in Swift by specifying each individual date component, use DateComponents:

var components = DateComponents()
components.day = 15
components.month = 1
components.year = 2023
components.hour = 0
components.minute = 10

let date = Calendar.current.date(from: components)

Date Components From A Date

To obtain date components, like the day number, from a Date use DateComponents:

// Use the user's set calendar
let calendar = Calendar.autoupdatingCurrent

// Get the year, month, and day from the date
let components = calendar.dateComponents(
[.year, .month, .day], 
from: Date()
)

// Reference the date components
nowComponents.year
nowComponents.month
nowComponents.day 

Parsing and Formatting Dates In Swift

That's it! By using DateFormatter, Date, Calendar, and DateComponents you can parse, format, and work with date components in Swift.