Haskell程序 检查生日并打印生日快乐信息
在Haskell中,这个程序将帮助我们检查当前日期和指定的生日,如果匹配,将打印 “生日快乐 “信息,否则,将打印 “还不是你的生日”。Haskell提供了获取当前日期和指定日期的函数。这个程序可以通过各种方法实现,包括使用toGregorian函数、fromGregorian函数或使用utctDay<$> getCurrentTime。
这个程序只检查一次生日,当程序运行时。如果我们想让程序定期或在特定的时间检查生日,我们可以使用像定时器或时间表这样的库,在特定的时间间隔内安排检查。
方法1:使用toGregorian函数
这个方法使用Data.Time库来获取当前日期,并使用toGregorian函数来提取当前日期的日期和月份。
然后,它将当前的日期和月份与指定的生日进行比较,如果匹配,就打印出 “生日快乐!”否则就打印出 “还不是你的生日”。
算法
- 第1步–Data.Time模块被导入。
-
第2步 – 指定的生日被定义为日和月。
-
第3步 – 程序的执行将从主函数开始。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函数将生日定义为本地时间。
-
第3步 – 程序的执行将从主函数开始。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 = 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。