datetime - 如何将 xx 秒、分钟或小时添加到 DateTime 结构?
问题描述
DateTime
我想为现有值(格式)添加一段时间{{Y,M,D},{H,m,s}}
,但没有看到Calendar
允许我DateTime
直接操作值的函数(例如模块中)。
如何将(例如)10 秒、10 分钟或 10 小时添加到这样的值?
解决方案
您可以使用该Calendar
模块将其转换DateTime
为秒,这样可以更轻松地添加所需的秒、分、小时等。
例如,要添加 10 秒:
Date = {{2018,8,14},{13,10,25}}.
DateInSeconds = calendar:datetime_to_gregorian_seconds(Date). % 63701471425
NewDateInSeconds = DateInSeconds + 10. % 63701471435
calendar:gregorian_seconds_to_datetime(NewDateInSeconds). % {{2018,8,14},{13,10,35}}
10 分钟或 10 小时,只需执行一点数学运算:
Date = {{2018,8,14},{13,10,25}}.
DateInSeconds = calendar:datetime_to_gregorian_seconds(Date). % 63701471425
NewDateInSeconds = DateInSeconds + (10 * 60 * 60). % 63701507425 (10 hours)
calendar:gregorian_seconds_to_datetime(NewDateInSeconds). % {{2018,8,14},{23,10,25}}
为了让生活更轻松,您甚至可以为此创建一个函数,为现有的添加额外时间(或从中减去时间)DateTime
:
-type datetime() :: {{non_neg_integer(), pos_integer(), pos_integer()},
{non_neg_integer(), non_neg_integer(), non_neg_integer()}}.
-type timespan() :: {integer(), integer(), integer()}.
-spec add_time_to_datetime(datetime(), timespan()) -> datetime().
add_time_to_datetime(Date, {Hour, Min, Sec}) ->
DateInSeconds = calendar:datetime_to_gregorian_seconds(Date),
NewDateInSeconds = DateInSeconds + (Hour * 60 * 60) + (Min * 60) + Sec,
calendar:gregorian_seconds_to_datetime(NewDateInSeconds).
推荐阅读
- node.js - Node JS请求获取原始url
- simulink - 如何将结构用作 simulink 子系统的参数并将内部的字段用作模块参数?
- c++ - 创建一个模板函数,根据模板参数类型条件返回不同的元组类型
- javascript - Vue 中的 STLLoader 无法正常工作
- python - ValueError:使用 sklearn 的 train_test_split 时
- c# - 如何使用 C#“查询”Active Directory
- r - 将数据作为数据框读入,将某些分类变量作为因子,并对某些数值变量进行转换
- python - 无法通过 apache/httpd 从外部 IP 地址访问第二个烧瓶服务器
- python - Heroku python如何使用pip
- firefox - SSO 登录: Cookie 方案在 FireFox 中不匹配