Elixir/Phoenix使用Timex库获取当前时间的格式化问题
嗨,这个问题我太熟悉了!其实完全不用自己手动判断补零,Timex本身就提供了原生的格式化工具来搞定这个需求,给你分享两种实用的方法:
方法1:用Timex的格式化函数直接生成带前置零的分量
Timex的Timex.format!/3(或者Timex.format/3,前者直接返回结果,后者返回{:ok, result}或{:error, reason})支持标准的strftime格式符,能自动给小于10的时间分量补零。比如:
# 先获取当前时间 time = Timex.now() # 获取两位带前置零的分钟数 Timex.format!(time, "%M", :strftime) # 当分钟是5时,输出:"05" # 获取两位带前置零的24小时制小时 Timex.format!(time, "%H", :strftime) # 比如凌晨3点会输出:"03" # 获取两位带前置零的秒数 Timex.format!(time, "%S", :strftime) # 秒数是7时输出:"07"
这里的%M、%H、%S都是标准的strftime格式标记,专门对应两位数字的分钟、24小时制小时、秒,完全不用自己处理补零逻辑,库已经帮你做好了。
方法2:简洁的手动补零(备选方案)
如果你只是想基于已经提取的数值(比如time.minute)来补零,也可以用Elixir原生的String.pad_leading/3来实现,比手动判断长度更简洁:
time = Timex.now() String.pad_leading(Integer.to_string(time.minute), 2, "0") # 同样会输出"05"当分钟是5的时候
不过这个方法本质还是手动补零,显然第一种用Timex原生格式化的方式更优雅,也更符合“最优解”的要求。
另外补充一下,Timex支持的strftime格式符还有很多,比如%I对应两位的12小时制小时,%p对应AM/PM标记,你可以根据自己的需求灵活选择。
内容的提问来源于stack exchange,提问作者Денис Корх
相关产品推荐
相关产品推荐

