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 次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告