Swiftpack.co - davdroman/PeriodDuration as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by davdroman.
davdroman/PeriodDuration 0.16.0
The ISO 8601 period/duration APIs missing in Foundation
⭐️ 28
🕓 31 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/davdroman/PeriodDuration.git", from: "0.16.0")

PeriodDuration

CI

This library introduces a close equivalent to Java's PeriodDuration, motivated by the lack of support for this standard in Foundation.

PeriodDuration is based off of a previous library I worked on, however it goes beyond simple serialization by introducing dedicated types with full ISO 8601 compliant Codable support.

Usage

Available types: Period, Duration and PeriodDuration.

Period

ISO 8601 defines a "Period" as a combination of years, months, and days elapsed. Periods do not include hours, minutes or seconds.

Period(years: 3, months: 1, days: 5) // = "P3Y1M5D"

Duration

ISO 8601 defines a "Duration" as a combination of hours, minutes or seconds elapsed. Durations do not include years, months, and days.

Duration(hours: 2, minutes: 5, seconds: 0) // = "PT2H5M0S"

PeriodDuration

PeriodDuration is a combinations of years, months, days, hours, minutes and seconds elapsed. As a type, it holds both a Period and a Duration instance within it to represent all of these values.

PeriodDuration(years: 3, months: 1, days: 5, hours: 2, minutes: 5, seconds: 0) // = "P3Y1M5DT2H5M0S"

Conversion to DateComponents

All three types provided allow for easy conversion into the built-in DateComponents type in Foundation.

let dateComponents: DateComponents = Period(years: 3, months: 1, days: 5).asDateComponents

This allows for a number of handy things. Namely:

Benchmarks

MacBook Pro (14-inch, 2021)
Apple M1 Pro (10 cores, 8 performance and 2 efficiency)
32 GB Memory

$ swift run -c release Benchmarks

name                 time        std        iterations
------------------------------------------------------
parse PeriodDuration 1041.000 ns ±  26.34 %    1000000
print PeriodDuration 1291.000 ns ±  12.34 %    1000000
parse Period         1333.000 ns ±  13.65 %    1000000
print Period          666.000 ns ±  38.67 %    1000000
parse Duration       1041.000 ns ±  33.51 %    1000000
print Duration        666.000 ns ±  16.86 %    1000000

GitHub

link
Stars: 28
Last commit: 30 weeks ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

0.16.0
31 weeks ago

What's Changed

Full Changelog: https://github.com/davdroman/PeriodDuration/compare/0.15.0...0.16.0

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics