You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
5.9 KiB

//
// Date+Format.swift
// DateToolsTests
//
// Created by Matthew York on 8/23/16.
// Copyright © 2016 Matthew York. All rights reserved.
//
import Foundation
/**
* Extends the Date class by adding convenience methods for formatting dates.
*/
public extension Date {
// MARK: - Formatted Date - Style
/**
* Get string representation of date.
*
* - parameter dateStyle: The date style in which to represent the date
* - parameter timeZone: The time zone of the date
* - parameter locale: Encapsulates information about linguistic, cultural, and technological conventions and standards
*
* - returns: Represenation of the date (self) in the specified format
*/
func format(with dateStyle: DateFormatter.Style, timeZone: TimeZone, locale: Locale) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = dateStyle
dateFormatter.timeZone = timeZone
dateFormatter.locale = locale
return dateFormatter.string(from: self)
}
/**
* Get string representation of date. Locale is automatically selected as the current locale of the system.
*
* - parameter dateStyle: The date style in which to represent the date
* - parameter timeZone: The time zone of the date
*
* - returns String? - Represenation of the date (self) in the specified format
*/
func format(with dateStyle: DateFormatter.Style, timeZone: TimeZone) -> String {
#if os(Linux)
return format(with: dateStyle, timeZone: timeZone, locale: Locale.current)
#else
return format(with: dateStyle, timeZone: timeZone, locale: Locale.autoupdatingCurrent)
#endif
}
/**
* Get string representation of date.
* Time zone is automatically selected as the current time zone of the system.
*
* - parameter dateStyle: The date style in which to represent the date
* - parameter locale: Encapsulates information about linguistic, cultural, and technological conventions and standards.
*
* - returns: Represenation of the date (self) in the specified format
*/
func format(with dateStyle: DateFormatter.Style, locale: Locale) -> String {
return format(with: dateStyle, timeZone: TimeZone.autoupdatingCurrent, locale: locale)
}
/**
* Get string representation of date.
* Locale and time zone are automatically selected as the current locale and time zone of the system.
*
* - parameter dateStyle: The date style in which to represent the date
*
* - returns: Represenation of the date (self) in the specified format
*/
func format(with dateStyle: DateFormatter.Style) -> String {
#if os(Linux)
return format(with: dateStyle, timeZone: TimeZone.autoupdatingCurrent, locale: Locale.current)
#else
return format(with: dateStyle, timeZone: TimeZone.autoupdatingCurrent, locale: Locale.autoupdatingCurrent)
#endif
}
// MARK: - Formatted Date - String
/**
* Get string representation of date.
*
* - parameter dateFormat: The date format string, according to Apple's date formatting guide in which to represent the date
* - parameter timeZone: The time zone of the date
* - parameter locale: Encapsulates information about linguistic, cultural, and technological conventions and standards
*
* - returns: Represenation of the date (self) in the specified format
*/
func format(with dateFormat: String, timeZone: TimeZone, locale: Locale) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.timeZone = timeZone
dateFormatter.locale = locale
return dateFormatter.string(from: self)
}
/**
* Get string representation of date.
* Locale is automatically selected as the current locale of the system.
*
* - parameter dateFormat: The date format string, according to Apple's date formatting guide in which to represent the date
* - parameter timeZone: The time zone of the date
*
* - returns: Representation of the date (self) in the specified format
*/
func format(with dateFormat: String, timeZone: TimeZone) -> String {
#if os(Linux)
return format(with: dateFormat, timeZone: timeZone, locale: Locale.current)
#else
return format(with: dateFormat, timeZone: timeZone, locale: Locale.autoupdatingCurrent)
#endif
}
/**
* Get string representation of date.
* Time zone is automatically selected as the current time zone of the system.
*
* - parameter dateFormat: The date format string, according to Apple's date formatting guide in which to represent the date
* - parameter locale: Encapsulates information about linguistic, cultural, and technological conventions and standards
*
* - returns: Represenation of the date (self) in the specified format
*/
func format(with dateFormat: String, locale: Locale) -> String {
return format(with: dateFormat, timeZone: TimeZone.autoupdatingCurrent, locale: locale)
}
/**
* Get string representation of date.
* Locale and time zone are automatically selected as the current locale and time zone of the system.
*
* - parameter dateFormat: The date format string, according to Apple's date formatting guide in which to represent the date
*
* - returns: Represenation of the date (self) in the specified format
*/
func format(with dateFormat: String) -> String {
#if os(Linux)
return format(with: dateFormat, timeZone: TimeZone.autoupdatingCurrent, locale: Locale.current)
#else
return format(with: dateFormat, timeZone: TimeZone.autoupdatingCurrent, locale: Locale.autoupdatingCurrent)
#endif
}
}