You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell技术问题:如何从ZonedTime中提取TimeOfDay与DayOfWeek

实现ZonedTime到(TimeOfDay, DayOfWeek)的转换

嘿,这个需求其实很容易搞定,咱们直接利用time库提供的现成函数就能实现。先给你两种写法,你可以根据自己的偏好选:

写法一:分步拆解(可读性优先)

这种写法用let绑定一步步拆解数据结构,新手看起来更清晰:

import Data.Time.LocalTime

timeOfDayAndDayOfWeek :: ZonedTime -> (TimeOfDay, DayOfWeek)
timeOfDayAndDayOfWeek zt = 
  let localTime = zonedTimeToLocalTime zt  -- 从ZonedTime里取出包含日期和时间的LocalTime
      tod = localTimeOfDay localTime       -- 从LocalTime里提取当天的具体时间(TimeOfDay)
      day = localDay localTime             -- 从LocalTime里提取当天的日期(Day)
      dow = dayOfWeek day                  -- 把Day转换成对应的星期几(DayOfWeek)
  in (tod, dow)

写法二:模式匹配(简洁优先)

如果你熟悉Haskell的模式匹配,可以直接解构ZonedTime的构造器,省去中间变量,代码更紧凑:

import Data.Time.LocalTime

timeOfDayAndDayOfWeek :: ZonedTime -> (TimeOfDay, DayOfWeek)
timeOfDayAndDayOfWeek (ZonedTime (LocalTime day tod) _) = (tod, dayOfWeek day)

这里我们直接忽略了ZonedTime里的时区信息(因为需求不需要它),直接把LocalTime拆成day(日期)和tod(时间),再把day转成星期几就行。

补充说明

确保你已经正确导入了Data.Time.LocalTime模块,它包含了我们用到的所有类型(ZonedTime、LocalTime、TimeOfDay、DayOfWeek)和工具函数(zonedTimeToLocalTime、localTimeOfDay、localDay、dayOfWeek),不需要额外导入其他模块。

内容的提问来源于stack exchange,提问作者pathikrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:42:59