Skip to content
Building a better date/time library for Swift
Branch: master
Clone or download

Latest commit

davedelong Merge pull request #32 from elitalon/add-readme-examples
Add small examples section to README
Latest commit 099cb7b Mar 14, 2020


Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Merge pull request #14 from danielctull-forks/nightlies-workflow Mar 1, 2020
Documentation Rename "Unsafe" -> "Strict" Mar 8, 2020
Sources Rename "Unsafe" -> "Strict" Mar 8, 2020
Tests List initialization tests in `allTests` Mar 7, 2020
.gitignore Convert to Swift 5 Package Oct 1, 2019
LICENSE Create LICENSE Oct 25, 2019
Package.swift Working on README; refocusing 1.0 release Feb 4, 2020 Add small examples section to README Mar 14, 2020


Time is a Swift package that makes dealing with calendar values a natural and straight-forward process.

Working with calendars can be extremely complicated and error-prone. Time solves these problems by clarifying concepts and restricting improper usage through type-safe APIs.


Time can be installed like any other Swift package. Add this to the dependencies section of your Package.swift:

.package(url: "", from: "0.9.0")

The Basics

Here's the TL;DR of the documentation:

  • If you want to know what time it is, you need a Clock. You can get the device's clock by using Clock.system.

  • A Clock can tell you the current time via some functions. For example, .today() will give you the current calendar day. .thisMinute() will give you the current time, accurate down to the minute level.

  • Each of these returned values has methods to retrieve more- and less- precise values. For example, today.hours() will give you a sequence of all the "Hour" values in the day.

  • These values also are how you format them into human-readable strings (via the .format(...) method)

Some Small Examples

There are some examples below showing a sneak peek of what you can do with Time.

Fetching the Current Time

let clock = Clock.system

// retrieve the current instantaneous time from the clock
let now = clock.thisInstant()

// retrieve the current calendar day, as defined by the user's region
let today =

More information in "Clock".

Converting Between Regions

let nycTimeZone = TimeZone(identifier: "America/New_York")!

let myClock = Clock.system
let nycClock = myClock.converting(to: nycTimeZone)

let myLocalTime = myClock.thisMinute() // Ex: 28 Feb 2020 at 3:14 PM Pacific Time

let nycLocalTime = nycClock.thisMinute() // Ex: 28 Feb 2020 at 6:14 PM Eastern Time

More information in "Clock".

Retrieving Components

let today: Absolute<Day> =
let year = today.year // Ex: 2020
let month = today.month // Ex: 2
let day = // Ex: 28

More information in "Value".

Calculating Differences

let day1: Absolute<Day> = ...
let day2: Absolute<Day> = ...

// compute the difference in days, months, years, and eras
let difference: Difference<Day, Era> = day1.difference(to: day2)

// or conveniently the number of calendar days between the two values
let daysDifference = day1.differenceInDays(to: day2)

More information in "Differences".

Iterating Over Values

let thisMonth = Clock.system.thisMonth()
let daysInThisMonth = thisMonth.days()

for day in daysInThisMonth {

More information in "Iterating Over Values".

Formatting Values

let today: Absolute<Day> = ...

let fullYearString = today.format(date: .full) // Ex: February 28, 2020
let shortYearString = today.format(year: .twoDigits, month: .full) // Ex: February '20

More information in "Formatting Values".

Detailed Information

For more information, please see the documentation.

You can’t perform that action at this time.