Haskell程式檢查生日並列印生日快樂資訊


在Haskell中,此程式將幫助我們檢查當前日期與指定的生日是否匹配,如果匹配則列印“生日快樂”資訊,否則列印“還沒到你的生日”。Haskell提供函式來獲取當前日期以及指定日期。此程式可以透過多種方法實現,包括使用toGregorian函式、fromGregorian函式或使用utctDay <$> getCurrentTime。

此程式只會檢查一次生日,即程式執行時。如果我們希望程式定期或在特定時間檢查生日,我們可以使用像timer或schedule這樣的庫,以特定間隔安排檢查。

方法1:使用toGregorian函式

此方法使用Data.Time庫獲取當前日期,並使用toGregorian函式提取當前日期的日和月。

然後將當前日和月與指定的生日進行比較,如果匹配,則列印“生日快樂!”,否則列印“還沒到你的生日”。

演算法

  • 步驟1 - 匯入Data.Time模組。

  • 步驟2 - 將指定的生日定義為日和月。

  • 步驟3 - 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do..

  • 步驟4 - 使用getCurrentTime和toGregorian函式獲取當前日期。

  • 步驟5 - 將當前日和月與上面指定的生日進行比較,並顯示最終輸出。

示例

在以下示例中,我們將使用toGregorian函式檢查生日並列印生日快樂資訊。

import Data.Time
birthday :: (Int, Int)
birthday = (12, 25)
main :: IO ()
main = do
   today <- getCurrentTime
   let (_, month, day) = toGregorian $ utctDay today
   if (month, day) == birthday
   then putStrLn "Happy Birthday!"
   else putStrLn "Not your birthday yet."

輸出

Not your birthday yet.

方法2:使用fromGregorian函式

在此方法中,使用getZonedTime函式獲取時區中的當前日期和時間,並使用zonedTimeToLocalTime函式提取本地日期和時間,儲存在now_time變數中。fromGregorian函式用於根據年、月和日整數建立Day值,然後LocalTime資料建構函式用於透過將Day值與TimeOfDay值組合來建立LocalTime值。

演算法

  • 步驟1 - 匯入Data.Time.LocalTime和Data.Time.Calendar模組。

  • 步驟2 - 使用fromGregorian函式將生日定義為LocalTime。

  • 步驟3 - 程式執行將從main函式開始。main()函式控制整個程式。

  • 步驟4 - 獲取並比較當前日期。

  • 步驟5 - 比較後顯示最終輸出。

示例

在此示例中,我們將使用fromGregorian函式檢查生日並列印生日快樂資訊。

import Data.Time.LocalTime
import Data.Time.Calendar
birthday :: LocalTime
birthday = LocalTime (fromGregorian 2022 12 25) (TimeOfDay 12 0 0)
main :: IO ()
main = do
   now <- getZonedTime
   let now_time = zonedTimeToLocalTime now
   if now_time == birthday
   then putStrLn "Happy Birthday!"
   else putStrLn "Not your birthday yet."

輸出

Not your birthday yet.

方法3:使用fromGregorian函式和utctDay <$> getCurrentTime。

在此方法中,使用Data.Time模組及其Day型別,它是一個圍繞整數的新型別包裝器,表示自紀元(1年1月1日)以來的天數。fromGregorian函式用於根據年、月和日整數建立Day值。utctDay <$> getCurrentTime用於獲取UTC中的當前日期和時間,並從當前日期中提取日。然後將當前日與指定的生日進行比較,如果匹配,則列印“生日快樂!”,否則列印“還沒到你的生日”。

演算法

  • 步驟1 - 匯入Data.Time模組。

  • 步驟2 - 使用fromGregorian函式將指定的生日定義為日。

  • 步驟3 - 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。

  • 步驟4 - 使用utctDay <$> getCurrentTime獲取當前日期。

  • 步驟5 - 比較指定的生日和獲取的當前日期後顯示最終輸出。

示例

在此示例中,我們將使用fromGregorian函式和utctDay <$> getCurrentTime。

import Data.Time
birthday :: Day
birthday = fromGregorian 2022 12 25
main :: IO ()
main = do
   today <- utctDay <$> getCurrentTime
   if (today == birthday)
   then putStrLn "Happy Birthday!"
   else putStrLn "Not your birthday yet."

輸出

Not your birthday yet.

結論

在Haskell中,定義了指定的生日並獲取了當前日期。並將此指定的生日與獲取的當前日期進行比較,如果相同,則輸出列印為生日快樂資訊,否則將顯示還沒到你的生日。可以透過多種方法實現,包括使用toGregorian函式、fromGregorian函式或使用utctDay <$> getCurrentTime。

更新於: 2023年1月19日

306 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.