今日の日付をISO 8601形式で表示する
ISO 8601 形式で今日の日付を表示する.
プログラムコード
暦日付(calendar date),暦通算日付(ordinal date),暦週日付(week date)の形式の選択はオプションではなくてプログラム名で区別するようにした(手抜き^^;).
code:today.hs
module Main where
import Control.Applicative
import Data.Char
import Data.List
import Data.Time
import Data.Time.Calendar.OrdinalDate
import Data.Time.Calendar.WeekDate
import Math.NumberTheory.Primes
import System.Environment
main :: IO ()
main = dispatch =<< getProgName
dispatch :: String -> IO ()
dispatch "todayo" = today showOrdinalDate
dispatch "todayp" = today showPrimeDate
dispatch "todayw" = today showWeekDate
dispatch _ = today showGregorian
today :: (Day -> String) -> IO ()
today showDate = putStrLn . showDate . localDay
=<< (utcToLocalTime <$> getCurrentTimeZone <*> getCurrentTime)
showPrimeDate :: Day -> String
showPrimeDate d = case filter isDigit (showGregorian d) of
ds -> case factorise (read ds :: Integer) of
1) -> ds ++ " : 今日は素数だがんばろう"
fs -> ds ++ " = " ++ showFactors fs ++ " : 今日は素数じゃないね"
showFactors = intercalate " * " . map showFactor
showFactor :: (Prime Integer, Word) -> String
showFactor (n,p) = case p of
1 -> show (unPrime n)
_ -> show (unPrime n) ++ "^" ++ show p
コンパイル後,プログラムを適切な名前(today,todayo,todayp,todayw)にシンボリックリンクする.
素数日付機能^^; 追加 (2020/12/8)