1

Haskell で利用できるさまざまな日付と時刻のライブラリのすべてで、私はかなり迷っています。私がやろうとしているのは、ファイルの変更時刻を「yyyy-MM-dd」の形式にすることです。誰かがそれを行う方法を教えてもらえますか?

私はこのコードスニペットを持っています:

main = do
  times <- mapM getModificationTime $ dataFiles config -- dataFiles returns [FilePath].
  -- I'd like to do something like the following:
  (putStr . unlines . map formatDate) times

これは私が試みたものです。笑わないでください!

formatDate t =
  let (year, month, day) = toGregorian $ utctDay t
   in intercalate "-" $ map show [year, fromIntegral month, fromIntegral day]

月と日をゼロで埋めることはできないので、まだ完全に私の仕様に達していないことはわかっています。私はそれを修正することができます。しかし、私が求めているものを取得するためのよりエレガントな方法があると考えていCouldn't match expected type 'UTCTime' with actual type 'ClockTime'ます.

あなたが提供できる助けや明確さを提供してくれてありがとう。

4

2 に答える 2

1

このようなものは を に変換する必要がClockTimeありUTCTimeます:

import System.Time
import Data.Time.Clock.POSIX

utcTimeFromClockTime :: ClockTime -> UTCTime
utcTimeFromClockTime (TOD seconds picoseconds)
   = posixSecondsToUTCTime . fromRational
        $ fromInteger seconds + fromInteger picoseconds / 1000000000000

おそらく、ローカル タイム ゾーンを使用するように変換する必要があります。utcToLocalZonedTime :: UTCTime -> IO ZonedTimeData.Time.LocalTime から使用します。

いずれにせよ、フォーマットできるタイムスタンプがあります。

import Data.Time.Format
import System.Locale

formatIsoDate :: FormatTime t => t -> String
formatIsoDate = formatTime defaultTimeLocale "%F"

(申し訳ありませんが、私はこのコードをテストしていません。)

于 2013-05-14T19:45:17.973 に答える