diff --git a/.codecov.yml b/.codecov.yml deleted file mode 100644 index 162b7ce..0000000 --- a/.codecov.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage: - ignore: - - ./Example/.* \ No newline at end of file diff --git a/github/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 100% rename from github/CONTRIBUTING.md rename to .github/CONTRIBUTING.md diff --git a/github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md similarity index 100% rename from github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE.md diff --git a/github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from github/PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8fceccd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,37 @@ +name: CI +on: [push, pull_request] +env: + FRAMEWORK: "SHDateFormatter" + XCOV_SCHEME: "SHDateFormatter-iOS" + FRAMEWORK_WORKSPACE: "SHDateFormatter.xcworkspace" + FASTLANE_XCODE_LIST_TIMEOUT: 999 + FASTLANE_WORK_DIR: . + MINT_PATH: ${{ github.workspace }}/mint + +jobs: + bootstrap-and-test: + name: Test + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Download Configuration Files + run: bash <(curl -s https://raw.githubusercontent.com/Blackjacx/Scripts/master/frameworks/bootstrap.sh) -d + - name: Cache RubyGems + uses: actions/cache@v2 + with: + path: vendor/bundle + key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: ${{ runner.os }}-gem- + - name: Cache Mint packages + uses: actions/cache@v2 + with: + path: ${{ env.MINT_PATH }} + key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} + restore-keys: ${{ runner.os }}-mint- + - name: Install dependencies + run: bash <(curl -s https://raw.githubusercontent.com/Blackjacx/Scripts/master/frameworks/bootstrap.sh) + - name: Run tests + run: bundle exec fastlane test framework:${{ env.FRAMEWORK }} run_danger:${{ github.event_name }} + env: + DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 0fb4f08..845c0ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,38 @@ -# OS X -.DS_Store - # Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +# macos +**/.DS_Store +**/.env + +## CI +codesigndoc_exports + +# Carthage framework bundle - created during release process +*.framework.zip +# Fastlane config script is downloaded +fastlane/Fastfile +# Fastlane plugin config is downloaded +fastlane/Pluginfile +# Mint dependencies file which is downloaded +Mintfile +# Swiftlint config file which is downloaded +.swiftlint.yml +# Danger config file which is downloaded +Dangerfile +# Ruby gems config file which is downloaded +Gemfile +# Bundler configuration which is bootstrapped +.bundle +# Bundler vendor information which is bootstrapped +vendor + +## Build generated build/ +DerivedData/ + +## Various settings *.pbxuser !default.pbxuser *.mode1v3 @@ -12,29 +42,43 @@ build/ *.perspectivev3 !default.perspectivev3 xcuserdata/ -*.xccheckout -profile + +## Other *.moved-aside -DerivedData +*.xccheckout +*.xcscmblueprint + +## Obj-C/Swift specific *.hmap *.ipa +*.dSYM.zip +*.dSYM -# Auto generated -docs/ +## Playgrounds +timeline.xctimeline +playground.xcworkspace -# Bundler -.bundle +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +.build/ -Carthage +# CocoaPods +# # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Note: if you ignore the Pods directory, make sure to uncomment -# `pod install` in .travis.yml +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # Pods/ +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts +Carthage/Build + # SPM .swiftpm @@ -43,7 +87,7 @@ Pods/ # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: -# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md +# https://docs.fastlane.tools/best-practices/source-control/#source-control fastlane/report.xml fastlane/Preview.html diff --git a/CHANGELOG.md b/CHANGELOG.md index e30f3ab..6aa52cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## [Unreleased] +## [1.5.0] - 2020-08-07 +* [#21](https://github.com/Blackjacx/SHDateFormatter/pull/21): Add month formatting - [@blackjacx](https://github.com/blackjacx). + ## [1.4.3] - 2019-12-03 * [#19](https://github.com/Blackjacx/SHDateFormatter/pull/19): Add new accessibility date format & Fix Vulnerabilities & 12/24h check - [@blackjacx](https://github.com/blackjacx). @@ -24,14 +27,11 @@ * [#5](https://github.com/Blackjacx/SHDateFormatter/pull/5): Improve Robustness By Using Apple's Default Formatting Styles - [@blackjacx](https://github.com/blackjacx). ## [1.0.2] - 2017-10-10 -### Changed -* Refactor project structure +* Refactor project structure - [@blackjacx](https://github.com/blackjacx). ## [1.0.1] - 2017-10-10 -### Fixed -* Fix source-file reference in podspec +* Fix source-file reference in podspec - [@blackjacx](https://github.com/blackjacx). ## [1.0.0] - 2017-09-28 -### Changed * [#4](https://github.com/Blackjacx/SHDateFormatter/pull/4): Conversion to Swift 4 - [@blackjacx](https://github.com/blackjacx). -* opts in for new build system - [@blackjacx](https://github.com/blackjacx). +* Opts in for new build system - [@blackjacx](https://github.com/blackjacx). diff --git a/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme b/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme index 96c0ec0..55a2d0c 100644 --- a/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme +++ b/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme @@ -27,8 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - Bool { - // Override point for customization after application launch. - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + private func application(application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + true } - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - + func applicationWillResignActive(_ application: UIApplication) {} + func applicationDidEnterBackground(_ application: UIApplication) {} + func applicationWillEnterForeground(_ application: UIApplication) {} + func applicationDidBecomeActive(_ application: UIApplication) {} + func applicationWillTerminate(_ application: UIApplication) {} } - diff --git a/Example/source/ViewController.swift b/Example/source/ViewController.swift index 5769f1b..973b698 100644 --- a/Example/source/ViewController.swift +++ b/Example/source/ViewController.swift @@ -6,12 +6,12 @@ class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - let deDE_Locale = Locale(identifier: "de_DE") - let enUS_Locale = Locale(identifier: "en_US") - let frFR_Locale = Locale(identifier: "fr_FR") + let deDELocale = Locale(identifier: "de_DE") + let enUSLocale = Locale(identifier: "en_US") + let frFRLocale = Locale(identifier: "fr_FR") - print(SHDateFormatter.is12hFormat(deDE_Locale)) - print(SHDateFormatter.is12hFormat(enUS_Locale)) - print(SHDateFormatter.is12hFormat(frFR_Locale)) + print(SHDateFormatter.is12hFormat(deDELocale)) + print(SHDateFormatter.is12hFormat(enUSLocale)) + print(SHDateFormatter.is12hFormat(frFRLocale)) } } diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 4dac1e4..0000000 --- a/Gemfile +++ /dev/null @@ -1,16 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -source "https://rubygems.org" - -gem 'fastlane' -gem 'cocoapods' -gem 'xcov' -gem 'danger' -gem 'danger-changelog' -gem 'danger-commit_lint' -gem 'danger-swiftlint' - -plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') -eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/Gemfile.lock b/Gemfile.lock index ff2cdde..2e506bd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,28 +1,44 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.1) - activesupport (4.2.11.1) + CFPropertyList (3.0.2) + activesupport (4.2.11.3) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - algoliasearch (1.27.1) + algoliasearch (1.27.3) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) + aws-eventstream (1.1.0) + aws-partitions (1.352.0) + aws-sdk-core (3.104.3) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.36.0) + aws-sdk-core (~> 3, >= 3.99.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.75.0) + aws-sdk-core (~> 3, >= 3.104.1) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.1) + aws-sigv4 (1.2.1) + aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.3) claide (1.0.3) claide-plugins (0.9.2) cork nap open4 (~> 1.3) - cocoapods (1.8.4) + cocoapods (1.9.3) activesupport (>= 4.0.2, < 5) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.8.4) + cocoapods-core (= 1.9.3) cocoapods-deintegrate (>= 1.0.3, < 2.0) cocoapods-downloader (>= 1.2.2, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) @@ -37,98 +53,105 @@ GEM molinillo (~> 0.6.6) nap (~> 1.0) ruby-macho (~> 1.4) - xcodeproj (>= 1.11.1, < 2.0) - cocoapods-core (1.8.4) + xcodeproj (>= 1.14.0, < 2.0) + cocoapods-core (1.9.3) activesupport (>= 4.0.2, < 6) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) fuzzy_match (~> 2.0.4) nap (~> 1.0) + netrc (~> 0.11) + typhoeus (~> 1.0) cocoapods-deintegrate (1.0.4) - cocoapods-downloader (1.3.0) + cocoapods-downloader (1.4.0) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.0) cocoapods-stats (1.1.0) - cocoapods-trunk (1.4.1) + cocoapods-trunk (1.5.0) nap (>= 0.8, < 2.0) netrc (~> 0.11) - cocoapods-try (1.1.0) + cocoapods-try (1.2.0) colored (1.2) colored2 (3.1.2) commander-fastlane (4.4.6) highline (~> 1.7.2) - concurrent-ruby (1.1.5) + concurrent-ruby (1.1.6) cork (0.3.0) colored2 (~> 3.1) - danger (6.1.0) + danger (8.0.4) claide (~> 1.0) claide-plugins (>= 0.9.2) colored2 (~> 3.1) cork (~> 0.1) - faraday (~> 0.9) + faraday (>= 0.9.0, < 2.0) faraday-http-cache (~> 2.0) - git (~> 1.5) + git (~> 1.7) kramdown (~> 2.0) kramdown-parser-gfm (~> 1.0) no_proxy_fix octokit (~> 4.7) terminal-table (~> 1) - danger-changelog (0.6.0) + danger-changelog (0.6.1) danger-plugin-api (~> 1.0) danger-commit_lint (0.0.7) danger-plugin-api (~> 1.0) danger-plugin-api (1.0.0) danger (> 2.0) - danger-swiftlint (0.23.0) + danger-swiftlint (0.24.3) danger rake (> 10) thor (~> 0.19) - declarative (0.0.10) + danger-xcov (0.5.0) + danger (>= 2.1) + xcov (>= 1.7.3) + declarative (0.0.20) declarative-option (0.1.0) - digest-crc (0.4.1) + digest-crc (0.6.1) + rake (~> 13.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.5) - emoji_regex (1.0.1) + dotenv (2.7.6) + emoji_regex (3.0.0) escape (0.0.4) - excon (0.70.0) - faraday (0.17.1) + ethon (0.12.0) + ffi (>= 1.3.0) + excon (0.76.0) + faraday (1.0.1) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) http-cookie (~> 1.0.0) - faraday-http-cache (2.0.0) - faraday (~> 0.8) - faraday_middleware (0.13.1) - faraday (>= 0.7.4, < 1.0) - fastimage (2.1.7) - fastlane (2.137.0) + faraday-http-cache (2.2.0) + faraday (>= 0.8) + faraday_middleware (1.0.0) + faraday (~> 1.0) + fastimage (2.2.0) + fastlane (2.155.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) - babosa (>= 1.0.2, < 2.0.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) bundler (>= 1.12.0, < 3.0.0) colored commander-fastlane (>= 4.4.6, < 5.0.0) dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (>= 0.1, < 2.0) - excon (>= 0.45.0, < 1.0.0) - faraday (~> 0.17) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 0.13.1) + faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.21.2, < 0.24.0) + google-api-client (>= 0.37.0, < 0.39.0) google-cloud-storage (>= 1.15.0, < 2.0.0) highline (>= 1.7.2, < 2.0.0) json (< 3.0.0) - jwt (~> 2.1.0) + jwt (>= 2.1.0, < 3) mini_magick (>= 4.9.4, < 5.0.0) - multi_xml (~> 0.5) multipart-post (~> 2.0.0) plist (>= 3.1.0, < 4.0.0) - public_suffix (~> 2.0.0) - rubyzip (>= 1.3.0, < 2.0.0) + rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.3) simctl (~> 1.6.3) slack-notifier (>= 2.0.0, < 3.0.0) @@ -137,89 +160,97 @@ GEM tty-screen (>= 0.6.3, < 1.0.0) tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) - xcodeproj (>= 1.8.1, < 2.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-changelog (0.15.0) + ffi (1.13.1) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - git (1.5.0) - google-api-client (0.23.9) + git (1.7.0) + rchardet (~> 1.8) + google-api-client (0.38.0) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.5, < 0.7.0) + googleauth (~> 0.9) httpclient (>= 2.8.1, < 3.0) - mime-types (~> 3.0) + mini_mime (~> 1.0) representable (~> 3.0) retriable (>= 2.0, < 4.0) - signet (~> 0.9) - google-cloud-core (1.4.1) + signet (~> 0.12) + google-cloud-core (1.5.0) google-cloud-env (~> 1.0) - google-cloud-env (1.3.0) - faraday (~> 0.11) - google-cloud-storage (1.16.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.3.3) + faraday (>= 0.17.3, < 2.0) + google-cloud-errors (1.0.1) + google-cloud-storage (1.27.0) + addressable (~> 2.5) digest-crc (~> 0.4) - google-api-client (~> 0.23) + google-api-client (~> 0.33) google-cloud-core (~> 1.2) - googleauth (>= 0.6.2, < 0.10.0) - googleauth (0.6.7) - faraday (~> 0.12) + googleauth (~> 0.9) + mini_mime (~> 1.0) + googleauth (0.13.1) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.4, < 3.0) memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) - signet (~> 0.7) + signet (~> 0.14) highline (1.7.10) http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) i18n (0.9.5) concurrent-ruby (~> 1.0) - json (2.2.0) - jwt (2.1.0) - kramdown (2.1.0) + jmespath (1.4.0) + json (2.3.1) + jwt (2.2.1) + kramdown (2.3.0) + rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - memoist (0.16.1) - mime-types (3.3) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mini_magick (4.9.5) - minitest (5.13.0) + memoist (0.16.2) + mini_magick (4.10.1) + mini_mime (1.0.2) + minitest (5.14.1) molinillo (0.6.6) - multi_json (1.14.1) - multi_xml (0.6.0) + multi_json (1.15.0) multipart-post (2.0.0) - nanaimo (0.2.6) + nanaimo (0.3.0) nap (1.1.0) naturally (2.2.0) netrc (0.11.0) no_proxy_fix (0.1.2) - octokit (4.14.0) + octokit (4.18.0) + faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) open4 (1.3.4) - os (1.0.1) + os (1.1.1) plist (3.5.0) - public_suffix (2.0.5) + public_suffix (4.0.5) rake (13.0.1) + rchardet (1.8.0) representable (3.0.4) declarative (< 0.1.0) declarative-option (< 0.2.0) uber (< 0.2.0) retriable (3.1.2) + rexml (3.2.4) rouge (2.0.7) ruby-macho (1.4.0) - rubyzip (1.3.0) + rubyzip (2.3.0) sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) security (0.1.3) - signet (0.12.0) + signet (0.14.0) addressable (~> 2.3) - faraday (~> 0.9) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.6) + simctl (1.6.8) CFPropertyList naturally slack-notifier (2.3.2) @@ -228,26 +259,28 @@ GEM unicode-display_width (~> 1.1, >= 1.1.1) thor (0.20.3) thread_safe (0.3.6) - tty-cursor (0.7.0) - tty-screen (0.7.0) - tty-spinner (0.9.1) + tty-cursor (0.7.1) + tty-screen (0.8.1) + tty-spinner (0.9.3) tty-cursor (~> 0.7) - tzinfo (1.2.5) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.7) thread_safe (~> 0.1) uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.7.6) - unicode-display_width (1.6.0) + unf_ext (0.0.7.7) + unicode-display_width (1.7.0) word_wrap (1.0.0) - xcodeproj (1.13.0) + xcodeproj (1.17.1) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.2.6) - xcov (1.7.0) - fastlane (>= 2.82.0, < 3.0.0) + nanaimo (~> 0.3.0) + xcov (1.7.3) + fastlane (>= 2.141.0, < 3.0.0) multipart-post slack-notifier terminal-table @@ -257,7 +290,7 @@ GEM rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.0) xcpretty (~> 0.2, >= 0.0.7) - xcresult (0.2.0) + xcresult (0.2.1) PLATFORMS ruby @@ -268,9 +301,10 @@ DEPENDENCIES danger-changelog danger-commit_lint danger-swiftlint + danger-xcov fastlane fastlane-plugin-changelog xcov BUNDLED WITH - 2.0.1 + 2.1.4 diff --git a/LICENSE b/LICENSE index 6f84544..8e133b4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2019 Stefan Herold +Copyright (c) 2020 Stefan Herold Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Podfile.lock b/Podfile.lock index 9b55aff..a58f9a4 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - Nimble (8.0.4) + - Nimble (8.0.5) - Quick (2.2.0) DEPENDENCIES: @@ -12,9 +12,9 @@ SPEC REPOS: - Quick SPEC CHECKSUMS: - Nimble: 18d5360282923225d62b09d781f63abc1a0111fc + Nimble: 4ab1aeb9b45553c75b9687196b0fa0713170a332 Quick: 7fb19e13be07b5dfb3b90d4f9824c855a11af40e PODFILE CHECKSUM: 763483d3f1d753931666cf8edc278cad7a865e63 -COCOAPODS: 1.8.4 +COCOAPODS: 1.9.3 diff --git a/README.md b/README.md index 4ca26ba..41a4659 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@

SHDateFormatter

- - Build Status + + CI status Github Current Release Cocoapods Platforms - Xcode 11.0+ + Xcode 11.0+ iOS 9.0+ - Swift 5.1+ + Swift 5.2+ Github Repo Size Github Code Size Github Closed PR's @@ -22,10 +22,6 @@ License - - Codecov - - codebeat badge @@ -41,8 +37,10 @@ This framework supports encoding as well as decoding many different date and time format. At the moment the follownig are supported (see SHDateFormat): -* `shortWeekdayName` => Sun, Mon, Tue, ... -* `longWeekdayName` => Sunday, Monday, Tuesday, ... +* `shortWeekday` => Sun, Mon, Tue, ... +* `longWeekday` => Sunday, Monday, Tuesday, ... +* `shortMonth` => Jan, Feb, ... +* `longMonth` => January, February, ... * `shortTimeNoDate` => 12:00 PM, 1:00 AM * `shortTimeMediumDate` => Jan 1, 2000 at 12:00 AM * `noTimeShortDateNoYear` => 12/31 @@ -57,10 +55,6 @@ Additionally the following convenience functions are available on the SHDateForm * `localizedTimeStringFromDate(_:)` - will return `--:--` per default * ... to be continued ... -## Requirements - -The framework is compatible with Xcode 11 and Swift 5.1. The minimum version is iOS 9. - ## Installation SHDateFormatter is available through [CocoaPods](http://cocoapods.org). To install @@ -82,4 +76,4 @@ pod 'SHDateFormatter' ## License -SHDateFormatter is available under the MIT license. See the LICENSE file for more info. +Source is available under the MIT license. See the [LICENSE](LICENSE) file for more info. diff --git a/SHDateFormatter.podspec b/SHDateFormatter.podspec index 23a904d..8db4b53 100644 --- a/SHDateFormatter.podspec +++ b/SHDateFormatter.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'SHDateFormatter' - s.version = '1.4.3' + s.version = '1.5.0' s.license = { :type => 'MIT', :file => 'LICENSE' } s.summary = 'A date formatter supporting encoding as well as decoding of many different date and time formats including the often used ISO8601 standard.' s.description = <<-DESC diff --git a/SHDateFormatter.xcodeproj/project.pbxproj b/SHDateFormatter.xcodeproj/project.pbxproj index 2ae5fe1..d68e9a1 100644 --- a/SHDateFormatter.xcodeproj/project.pbxproj +++ b/SHDateFormatter.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -173,6 +173,7 @@ isa = PBXNativeTarget; buildConfigurationList = B9C8324321C84B300008ED90 /* Build configuration list for PBXNativeTarget "SHDateFormatter-iOS" */; buildPhases = ( + B902957023E7AE8B00269EA9 /* SwiftLint */, B9C8323921C84B300008ED90 /* Headers */, B9C8323A21C84B300008ED90 /* Sources */, B9C8323B21C84B300008ED90 /* Frameworks */, @@ -195,7 +196,7 @@ attributes = { LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 1010; - ORGANIZATIONNAME = CocoaPods; + ORGANIZATIONNAME = "Stefan Herold"; TargetAttributes = { 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; @@ -210,7 +211,7 @@ }; }; buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SHDateFormatter" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 11.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -272,20 +273,35 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FDF77FD1B9B4ED725533FA48 /* [CP] Embed Pods Frameworks */ = { + B902957023E7AE8B00269EA9 /* SwiftLint */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TestPods-SHDateFormatter_iOS_Tests/Pods-TestPods-SHDateFormatter_iOS_Tests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework", - "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework", ); - name = "[CP] Embed Pods Frameworks"; + name = SwiftLint; + outputFileListPaths = ( + ); outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mint run swiftlint\n"; + }; + FDF77FD1B9B4ED725533FA48 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-TestPods-SHDateFormatter_iOS_Tests/Pods-TestPods-SHDateFormatter_iOS_Tests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-TestPods-SHDateFormatter_iOS_Tests/Pods-TestPods-SHDateFormatter_iOS_Tests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -417,7 +433,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -431,7 +448,11 @@ "$(inherited)", ); INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -443,7 +464,11 @@ baseConfigurationReference = 922B1BD143DA18A28738AA1C /* Pods-TestPods-SHDateFormatter_iOS_Tests.release.xcconfig */; buildSettings = { INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -462,17 +487,21 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = PCW579R278; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 10; + DYLIB_CURRENT_VERSION = 11; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = source/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.codingcobra.SHDateFormatter; @@ -499,16 +528,20 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = PCW579R278; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 10; + DYLIB_CURRENT_VERSION = 11; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = source/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.codingcobra.SHDateFormatter; PRODUCT_NAME = SHDateFormatter; diff --git a/SHDateFormatter.xcodeproj/xcshareddata/xcschemes/SHDateFormatter-iOS.xcscheme b/SHDateFormatter.xcodeproj/xcshareddata/xcschemes/SHDateFormatter-iOS.xcscheme index b818b12..f96a3d4 100644 --- a/SHDateFormatter.xcodeproj/xcshareddata/xcschemes/SHDateFormatter-iOS.xcscheme +++ b/SHDateFormatter.xcodeproj/xcshareddata/xcschemes/SHDateFormatter-iOS.xcscheme @@ -26,7 +26,9 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + codeCoverageEnabled = "YES" + onlyGenerateCoverageForSpecifiedTargets = "YES"> + + + + diff --git a/Tests/DateFormatterTests.swift b/Tests/DateFormatterTests.swift index 899ffc7..b4feaa5 100644 --- a/Tests/DateFormatterTests.swift +++ b/Tests/DateFormatterTests.swift @@ -3,17 +3,21 @@ import Quick import Nimble @testable import SHDateFormatter -class DateFormatterTests: QuickSpec { +// swiftlint:disable:next type_body_length +final class DateFormatterTests: QuickSpec { + // swiftlint:disable:next function_body_length override func spec() { - describe("DateFormatter") { + let gmtZone = TimeZone.GMT + + let deDELocale = Locale(identifier: "de_DE") + let enUSLocale = Locale(identifier: "en_US") + let frFRLocale = Locale(identifier: "fr_FR") - let gmtZone = TimeZone(identifier: "Europe/London")! + var testDate: Date = Date() - let deDE_Locale = Locale(identifier: "de_DE") - let enUS_Locale = Locale(identifier: "en_US") - let frFR_Locale = Locale(identifier: "fr_FR") + describe("DateFormatter") { func dateFrom(year: Int, month: Int, day: Int, hour: Int, min: Int, sec: Int) -> Date { @@ -48,15 +52,15 @@ class DateFormatterTests: QuickSpec { context("12h format") { it("uses 12h format for locale en_US") { - expect(SHDateFormatter.is12hFormat(enUS_Locale)) == true + expect(SHDateFormatter.is12hFormat(enUSLocale)) == true } it("uses 24h format for locale de_DE") { - expect(SHDateFormatter.is12hFormat(deDE_Locale)) == false + expect(SHDateFormatter.is12hFormat(deDELocale)) == false } it("uses 24h format for locale fr_FR") { - expect(SHDateFormatter.is12hFormat(frFR_Locale)) == false + expect(SHDateFormatter.is12hFormat(frFRLocale)) == false } } @@ -65,7 +69,7 @@ class DateFormatterTests: QuickSpec { context("General Tests") { it("returns a nil date the input string is nil") { - let result = SHDateFormatter.shared.date(from: nil, format: .shortWeekdayName) + let result = SHDateFormatter.shared.date(from: nil, format: .shortWeekday) expect(result).to(beNil()) } } @@ -76,140 +80,316 @@ class DateFormatterTests: QuickSpec { context("General Tests") { it("returns an empty string the input date is nil") { - let result = SHDateFormatter.shared.string(from: nil, format: .shortWeekdayName) + let result = SHDateFormatter.shared.string(from: nil, format: .shortWeekday) expect(result) == "" } } context("Test 2000/01/01/12:00am") { - let testDate = dateFrom(year: 2000, month: 1, day: 1, hour: 0, min: 0, sec: 0) // 12 am a Saturday with DST + beforeEach { + // 12 am a Saturday with DST + testDate = dateFrom(year: 2000, + month: 1, + day: 1, + hour: 0, + min: 0, + sec: 0) + } - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "Sa" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "Samstag" } + it("ShortMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonth, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonth, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Januar" + } + + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "00:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "01.01.2000, 00:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "1.1." } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "01.01.00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "1. Januar 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Sat" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Saturday" } + it("ShortMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonth, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonth, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "January" + } + + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "12:00 AM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Jan 1, 2000 at 12:00 AM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/1" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/1/00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "January 1, 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "sam." } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "samedi" } + it("ShortMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonth, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janv." + } + + it("LongMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonth, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janvier" + } + + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "00:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "1 janv. 2000 à 00:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "01/01" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "01/01/2000" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "1 janvier 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } @@ -217,133 +397,309 @@ class DateFormatterTests: QuickSpec { context("Test 2000/01/02/12:00pm") { - let testDate = dateFrom(year: 2000, month: 1, day: 2, hour: 12, min: 0, sec: 0) // 12 pm a Sunday + beforeEach { + // 12 pm a Sunday + testDate = dateFrom(year: 2000, + month: 1, + day: 2, + hour: 12, + min: 0, + sec: 0) + } - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "So" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "Sonntag" } + it("ShortMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonth, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonth, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Januar" + } + + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "02.01.2000, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2.1." } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "02.01.00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2. Januar 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Sun" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Sunday" } + it("ShortMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonth, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonth, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "January" + } + + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Jan 2, 2000 at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/2" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/2/00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "January 2, 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "dim." } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "dimanche" } + it("ShortMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonth, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janv." + } + + it("LongMonth") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonth, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janvier" + } + + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2 janv. 2000 à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "02/01" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "02/01/2000" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2 janvier 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } @@ -353,133 +709,230 @@ class DateFormatterTests: QuickSpec { context("Yesterday Noon") { - let testDate = todayNoon().minus24Hours() + beforeEach { + testDate = todayNoon().minus24Hours() + } - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: deDELocale, + timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Gestern, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Gestern" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Gestern" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Yesterday at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Yesterday" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Yesterday" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "hier à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "hier" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "hier" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -487,133 +940,231 @@ class DateFormatterTests: QuickSpec { context("Today Noon") { - let testDate = todayNoon() + beforeEach { + testDate = todayNoon() + } - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Heute, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Heute" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Heute" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Today at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Today" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Today" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "aujourd’hui à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "aujourd’hui" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "aujourd’hui" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -621,133 +1172,231 @@ class DateFormatterTests: QuickSpec { context("Tomorrow Noon") { - let testDate = todayNoon().plus24Hours() + beforeEach { + testDate = todayNoon().plus24Hours() + } - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Morgen, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Morgen" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Morgen" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Tomorrow at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Tomorrow" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Tomorrow" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("ShortWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekday, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + it("LongWeekday") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekday, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "demain à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "demain" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "demain" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } diff --git a/Tests/Info.plist b/Tests/Info.plist index 73ed4c8..3fba1fe 100644 --- a/Tests/Info.plist +++ b/Tests/Info.plist @@ -15,8 +15,8 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.4.3 + 1.5.0 CFBundleVersion - 10 + 11 diff --git a/fastlane/Fastfile b/fastlane/Fastfile deleted file mode 100644 index 7bbecd9..0000000 --- a/fastlane/Fastfile +++ /dev/null @@ -1,6 +0,0 @@ - -import_from_git( - url: "git@github.com:Blackjacx/Scripts.git", - branch: "master", - path: "Fastfile_Pods" -) \ No newline at end of file diff --git a/fastlane/Pluginfile b/fastlane/Pluginfile deleted file mode 100644 index 8f896e8..0000000 --- a/fastlane/Pluginfile +++ /dev/null @@ -1,5 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -gem 'fastlane-plugin-changelog' diff --git a/source/Classes/Date+Utils.swift b/source/Classes/Date+Utils.swift index c403df6..56202da 100644 --- a/source/Classes/Date+Utils.swift +++ b/source/Classes/Date+Utils.swift @@ -3,24 +3,21 @@ // SHDateFormatter // // Created by Stefan Herold on 06.07.17. -// Copyright © 2017 StefanHerold. All rights reserved. +// Copyright © 2020 Stefan Herold. All rights reserved. // import Foundation -struct DateConstants { +enum DateConstants { static let dayInSeconds = 86400.0 } -extension Date { - - public func minus24Hours() -> Date { - - return addingTimeInterval(-DateConstants.dayInSeconds) +public extension Date { + func minus24Hours() -> Date { + addingTimeInterval(-DateConstants.dayInSeconds) } - public func plus24Hours() -> Date { - - return addingTimeInterval(DateConstants.dayInSeconds) + func plus24Hours() -> Date { + addingTimeInterval(DateConstants.dayInSeconds) } } diff --git a/source/Classes/SHDateFormatter+Extension.swift b/source/Classes/SHDateFormatter+Extension.swift index df65211..50b65a7 100644 --- a/source/Classes/SHDateFormatter+Extension.swift +++ b/source/Classes/SHDateFormatter+Extension.swift @@ -3,14 +3,14 @@ // SHDateFormatter // // Created by Stefan Herold on 07/10/2016. -// Copyright © 2016 StefanHerold. All rights reserved. +// Copyright © 2020 Stefan Herold. All rights reserved. // import Foundation -extension SHDateFormatter { - - public func localizedTimeStringFromDate(date: Date?) -> String { +public extension SHDateFormatter { + + func localizedTimeStringFromDate(date: Date?) -> String { date.map { string(from: $0, format: .shortTimeNoDate) } ?? "--:--" } } diff --git a/source/Classes/SHDateFormatter.swift b/source/Classes/SHDateFormatter.swift index bc9a71f..b0604ef 100644 --- a/source/Classes/SHDateFormatter.swift +++ b/source/Classes/SHDateFormatter.swift @@ -1,12 +1,16 @@ import Foundation -struct Calendars { +enum Calendars { static let gregorian: Calendar = Calendar(identifier: .gregorian) } public enum SHDateFormat: String { - case shortWeekdayName = "EEE" - case longWeekdayName = "EEEE" + case shortWeekday = "EEE" + case longWeekday = "EEEE" + case shortMonth = "MMM" + case longMonth = "MMMM" + case longYear = "yyyy" + case shortYear = "yy" case shortTimeNoDate case shortTimeMediumDate case noTimeShortDateNoYear = "d.M." @@ -44,10 +48,10 @@ public struct SHDateFormatter { let locale = SHDateFormatter.formatter.locale switch format { - case .shortWeekdayName: fallthrough - case .longWeekdayName: fallthrough - case .noTimeShortDateNoYear: - SHDateFormatter.formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: format.rawValue, options: 0, locale: locale) + case .shortWeekday, .longWeekday, .shortMonth, .longMonth, .longYear, .shortYear, .noTimeShortDateNoYear: + SHDateFormatter.formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: format.rawValue, + options: 0, + locale: locale) case .shortTimeNoDate: SHDateFormatter.formatter.timeStyle = .short @@ -96,7 +100,11 @@ public struct SHDateFormatter { * - parameter needsRelativeFormatting: Use relative formating when set to true. * - returns: A String object representing the date. */ - public func string(from date: Date?, format: SHDateFormat, locale: Locale? = nil, timeZone: TimeZone? = nil, needsRelativeFormatting: Bool = false) -> String { + public func string(from date: Date?, + format: SHDateFormat, + locale: Locale? = nil, + timeZone: TimeZone? = nil, + needsRelativeFormatting: Bool = false) -> String { var dateString: String = "" guard let date = date else { @@ -123,7 +131,11 @@ public struct SHDateFormatter { * - parameter needsRelativeFormatting: Use relative formating when set to true. * - returns: A Date object representing the date. */ - public func date(from string: String?, format: SHDateFormat, locale: Locale? = nil, timeZone: TimeZone? = nil, needsRelativeFormatting: Bool = false) -> Date? { + public func date(from string: String?, + format: SHDateFormat, + locale: Locale? = nil, + timeZone: TimeZone? = nil, + needsRelativeFormatting: Bool = false) -> Date? { var date: Date? guard let dateString = string else { diff --git a/source/Classes/TimeZone+Extensions.swift b/source/Classes/TimeZone+Extensions.swift index ad6ba39..a32abab 100644 --- a/source/Classes/TimeZone+Extensions.swift +++ b/source/Classes/TimeZone+Extensions.swift @@ -4,7 +4,7 @@ import Foundation public extension TimeZone { static let GMT = TimeZone(identifier: "GMT")! - + enum Europe { public static let Berlin = TimeZone(identifier: "Europe/Berlin")! public static let London = TimeZone(identifier: "Europe/London")! diff --git a/source/Info.plist b/source/Info.plist index 19f3e09..857d3cd 100644 --- a/source/Info.plist +++ b/source/Info.plist @@ -15,8 +15,8 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.4.3 + 1.5.0 CFBundleVersion - 10 + 11