首页 > 解决方案 > 如何将 xx 秒、分钟或小时添加到 DateTime 结构?

问题描述

DateTime我想为现有值(格式)添加一段时间{{Y,M,D},{H,m,s}},但没有看到Calendar允许我DateTime直接操作值的函数(例如模块中)。

如何将(例如)10 秒、10 分钟或 10 小时添加到这样的值?

标签: datetimeerlang

解决方案


您可以使用该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).

推荐阅读