module Data.Time.Exts.Util where
import Data.Int
import Data.Time.Exts.Base
baseUnixToUTC :: Int64 -> Int64
baseUnixToUTC base
| base >= 1483228800 = base + 28
| base >= 1435708800 = base + 27
| base >= 1341100800 = base + 26
| base >= 1230768000 = base + 25
| base >= 1136073600 = base + 24
| base >= 0915148800 = base + 23
| base >= 0867715200 = base + 22
| base >= 0820454400 = base + 21
| base >= 0773020800 = base + 20
| base >= 0741484800 = base + 19
| base >= 0709948800 = base + 18
| base >= 0662688000 = base + 17
| base >= 0631152000 = base + 16
| base >= 0567993600 = base + 15
| base >= 0489024000 = base + 14
| base >= 0425865600 = base + 13
| base >= 0394329600 = base + 12
| base >= 0362793600 = base + 11
| base >= 0315532800 = base + 10
| base >= 0283996800 = base + 09
| base >= 0252460800 = base + 08
| base >= 0220924800 = base + 07
| base >= 0189302400 = base + 06
| base >= 0157766400 = base + 05
| base >= 0126230400 = base + 04
| base >= 0094694400 = base + 03
| base >= 0078796800 = base + 02
| base >= 0063072000 = base + 01
| otherwise = base + 00
baseUTCToUnix :: Int64 -> (Int64, Double)
baseUTCToUnix base
| base >= 1483228828 = (base 028, 0)
| base == 1483228827 = (1483228799, 1)
| base >= 1435708827 = (base 027, 0)
| base == 1435708826 = (1435708799, 1)
| base >= 1341100826 = (base 026, 0)
| base == 1341100825 = (1341100799, 1)
| base >= 1230768025 = (base 025, 0)
| base == 1230768024 = (1230767999, 1)
| base >= 1136073624 = (base 024, 0)
| base == 1136073623 = (1136073599, 1)
| base >= 0915148823 = (base 023, 0)
| base == 0915148822 = (0915148799, 1)
| base >= 0867715222 = (base 022, 0)
| base == 0867715221 = (0867715199, 1)
| base >= 0820454421 = (base 021, 0)
| base == 0820454420 = (0820454399, 1)
| base >= 0773020820 = (base 020, 0)
| base == 0773020819 = (0773020799, 1)
| base >= 0741484819 = (base 019, 0)
| base == 0741484818 = (0741484799, 1)
| base >= 0709948818 = (base 018, 0)
| base == 0709948817 = (0709948799, 1)
| base >= 0662688017 = (base 017, 0)
| base == 0662688016 = (0662687999, 1)
| base >= 0631152016 = (base 016, 0)
| base == 0631152015 = (0631151999, 1)
| base >= 0567993615 = (base 015, 0)
| base == 0567993614 = (0567993599, 1)
| base >= 0489024014 = (base 014, 0)
| base == 0489024013 = (0489023999, 1)
| base >= 0425865613 = (base 013, 0)
| base == 0425865612 = (0425865599, 1)
| base >= 0394329612 = (base 012, 0)
| base == 0394329611 = (0394329599, 1)
| base >= 0362793611 = (base 011, 0)
| base == 0362793610 = (0362793599, 1)
| base >= 0315532810 = (base 010, 0)
| base == 0315532809 = (0315532799, 1)
| base >= 0283996809 = (base 009, 0)
| base == 0283996808 = (0283996799, 1)
| base >= 0252460808 = (base 008, 0)
| base == 0252460807 = (0252460799, 1)
| base >= 0220924807 = (base 007, 0)
| base == 0220924806 = (0220924799, 1)
| base >= 0189302406 = (base 006, 0)
| base == 0189302405 = (0189302399, 1)
| base >= 0157766405 = (base 005, 0)
| base == 0157766404 = (0157766399, 1)
| base >= 0126230404 = (base 004, 0)
| base == 0126230403 = (0126230399, 1)
| base >= 0094694403 = (base 003, 0)
| base == 0094694402 = (0094694399, 1)
| base >= 0078796802 = (base 002, 0)
| base == 0078796801 = (0078796799, 1)
| base >= 0063072001 = (base 001, 0)
| base == 0063072000 = (0063071999, 1)
| otherwise = (base 000, 0)
getPeriod :: Hour -> (String, Hour)
getPeriod hour
| hour == 00 = ("AM", 12)
| hour <= 11 = ("AM", hour)
| hour == 12 = ("PM", hour)
| otherwise = ("PM", hour 12)