前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >按持续时间偏移的日期时间

按持续时间偏移的日期时间

作者头像
冬夜先生
发布2022-01-05 09:56:20
2.7K0
发布2022-01-05 09:56:20
举报
文章被收录于专栏:csico

可以添加一个日期 x时间和一个持续时间来计算一个新的日期时间,它与线性时间轴上的距离正好是 的大小。在这里,datetime代表, , , or 中的任何一个,并且非空结果将是相同的类型。可以按如下方式计算日期时间偏移的持续时间:yx + yxyDateDateTimeDateTimeZoneTime

  • 如果指定了日期时间自纪元值以来的天数,则使用以下信息元素构造一个新的日期时间:
    • 计算自纪元以来的新天数,相当于将 y 的大小除以 24 小时内的 100 纳秒刻度数,截断结果的小数部分,并将此值添加到自纪元以来 x 的天数。
    • 计算自午夜以来的新滴答声,相当于将 y 的大小添加到自午夜起 x 的滴答声中,以 24 小时周期内 100 纳秒滴答声的数量为模。如果 x 没有指定自午夜以来的刻度值,则假定值为 0。
    • 复制 x 与 UTC 的分钟偏移量值不变。
  • 如果未指定日期时间自纪元值以来的天数,请使用指定的以下信息元素构建新的日期时间:
    • 计算自午夜以来的新滴答声,相当于将 y 的大小添加到自午夜起 x 的滴答声中,以 24 小时周期内 100 纳秒滴答声的数量为模。如果 x 没有指定自午夜以来的刻度值,则假定值为 0。
    • 复制自纪元以来的天数和与 UTC 的分钟偏移量不变的 x 值。

以下示例显示当 datetime 指定自 epoch 以来数时计算绝对时间总和:

复制

代码语言:javascript
复制
#date(2010,05,20) + #duration(0,8,0,0) 
    //#datetime( 2010, 5, 20, 8, 0, 0 ) 
    //2010-05-20T08:00:00 
 
#date(2010,01,31) + #duration(30,08,0,0) 
    //#datetime(2010, 3, 2, 8, 0, 0) 
    //2010-03-02T08:00:00 
 
#datetime(2010,05,20,12,00,00,-08) + #duration(0,04,30,00) 
    //#datetime(2010, 5, 20, 16, 30, 0, -8, 0) 
    //2010-05-20T16:30:00-08:00 
 
#datetime(2010,10,10,0,0,0,0) + #duration(1,0,0,0) 
   //#datetime(2010, 10, 11, 0, 0, 0, 0, 0) 
   //2010-10-11T00:00:00+00:00

以下示例显示了按给定时间的持续时间计算日期时间偏移量:

复制

代码语言:javascript
复制
#time(8,0,0) + #duration(30,5,0,0) 
   //#time(13, 0, 0) 
   //13:00:00

减法运算符

减法运算符 ( x - y)的解释取决于求值表达式x和的值类型y,如下所示:

X

结果

解释

type number

type number

type number

数值差异

type number

null

null

null

type number

null

type duration

type duration

type duration

数量级差

type duration

null

null

null

type duration

null

type 约会时间

type 约会时间

type duration

日期时间之间的持续时间

type 约会时间

type duration

type 约会时间

否定持续时间的日期时间偏移

type 约会时间

null

null

null

type 约会时间

null

在该表中,type 日期时间代表任何的type datetype datetimetype datetimezone,或type time。从某种类型的datetime值中减去持续时间时,结果值属于相同类型。

对于表中所列值以外的其他值组合,将"Expression.Error"引发带有原因代码的错误。以下各节介绍了每种组合。

传播评估任一操作数时引发的错误。

数值差异

使用减法运算符计算两个数字之间的差值,产生一个数字。例如:

复制

代码语言:javascript
复制
1 - 1                // 0 
#nan - #infinity     // #nan

-数字上的减法运算符使用双精度;标准库函数Value.Subtract可用于指定小数精度。在计算数字差异时,以下内容成立:

  • 双精度差是根据 64 位二进制双精度 IEEE 754 算法IEEE 754-2008的规则计算的。下表列出了非零有限值、零、无穷大和 NaN 的所有可能组合的结果。在表中,xy是非零有限值,z是 的结果x - y。如果xy相等,z则为正零。如果x - y太大而无法在目标类型中表示,z则是与 具有相同符号的无穷大x - y。 表 9——是+0-0+∞-∞NaNXzXX-∞+∞NaN+0-y+0+0-∞+∞NaN-0-y-0+0-∞+∞NaN+∞+∞+∞+∞NaN+∞NaN-∞-∞-∞-∞-∞NaNNaNNaNNaNNaNNaNNaNNaNNaN
  • 在不损失精度的情况下计算小数精度的差异。结果的标度是两个操作数的标度中较大的一个。
时长差异

两个持续时间的差值是表示每个持续时间所代表的 100 纳秒滴答数之差的持续时间。例如:

复制

代码语言:javascript
复制
#duration(1,2,30,0) - #duration(0,0,0,30.45) 
// #duration(1, 2, 29, 29.55)
否定持续时间的日期时间偏移

一个日期时间 x和持续时间y可以使用减去x - y计算新的日期时间。在这里,日期时间代表任何的datedatetimedatetimezone,或time。生成的日期x时间与线性时间轴上的距离正好是 的大小y,在 的符号相反的方向上y。减去正持续时间会产生相对于 的时间向后的结果x,而减去负值会产生时间向前的结果。

复制

代码语言:javascript
复制
#date(2010,05,20) - #duration(00,08,00,00) 
   //#datetime(2010, 5, 19, 16, 0, 0) 
   //2010-05-19T16:00:00 
#date(2010,01,31) - #duration( 30,08,00,00) 
   //#datetime(2009, 12, 31, 16, 0, 0) 
   //2009-12-31T16:00:00
两个日期时间之间的持续时间

两个日期时间, t并且u可以减去t - u用于计算它们之间的持续时间。在这里,日期时间代表任何的datedatetimedatetimezone,或time。通过减去ufrom产生的持续时间在添加到 时t必须产生。tu

复制

代码语言:javascript
复制
#date(2010,01,31) - #date(2010,01,15) 
// #duration(16,00,00,00) 
// 16.00:00:00 
 
#date(2010,01,15)- #date(2010,01,31) 
// #duration(-16,00,00,00) 
// -16.00:00:00 
 
#datetime(2010,05,20,16,06,00,-08,00) - 
#datetime(2008,12,15,04,19,19,03,00) 
// #duration(521,22,46,41)
// 521.22:46:41

减去t - uwhenu > t结果为负持续时间:

复制

代码语言:javascript
复制
#time(01,30,00) - #time(08,00,00) 
// #duration(0, -6, -30, 0)

使用减去两个日期时间时,以下内容成立t - u

  • u + (t - u) = t

乘法运算符

乘法运算符 ( x * y)的解释取决于计算表达式 x 和 y 的值类型,如下所示:

X

结果

解释

type number

type number

type number

数积

type number

null

null

null

type number

null

type duration

type number

type duration

持续时间的倍数

type number

type duration

type duration

持续时间的倍数

type duration

null

null

null

type duration

null

对于表中所列值以外的其他值组合,将"Expression.Error"引发带有原因代码的错误。以下各节介绍了每种组合。

传播评估任一操作数时引发的错误。

数积

使用乘法运算符计算两个数字的乘积,产生一个数字。例如:

复制

代码语言:javascript
复制
2 * 4                // 8 
6 * null             // null 
#nan * #infinity     // #nan

*数字上的乘法运算符使用双精度;标准库函数Value.Multiply可用于指定小数精度。在计算数字的乘积时,以下内容成立:

  • Double Precision 中的乘积是根据 64 位二进制双精度 IEEE 754 算法IEEE 754-2008的规则计算的。下表列出了非零有限值、零、无穷大和 NaN 的所有可能组合的结果。在表中,xy是正的有限值。z是 的结果x * y。如果结果对于目标类型来说太大,z则为无穷大。如果结果对于目标类型来说太小,z则为零。 表 11*+y-y+0-0+∞-∞NaN+x+z-z+0-0+∞-∞NaN-X-z+z-0+0-∞+∞NaN+0+0-0+0-0NaNNaNNaN-0-0+0-0+0NaNNaNNaN+∞+∞-∞NaNNaN+∞-∞NaN-∞-∞+∞NaNNaN-∞+∞NaNNaNNaNNaNNaNNaNNaNNaNNaN
  • Decimal Precision 中的乘积是在不损失精度的情况下计算的。结果的标度是两个操作数的标度中较大的一个。
持续时间的倍数

持续时间和数字的乘积是表示持续时间操作数所代表的 100 纳秒滴答数的持续时间乘以数字操作数。例如:

复制

代码语言:javascript
复制
#duration(2,1,0,15.1) * 2 
// #duration(4, 2, 0, 30.2)

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 减法运算符
    • 数值差异
      • 时长差异
        • 否定持续时间的日期时间偏移
          • 两个日期时间之间的持续时间
          • 乘法运算符
            • 数积
              • 持续时间的倍数
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档