繁体   English   中英

如何计算Excel中两个ISO 8601日期时间之间的秒数?

[英]How to calculate the number of seconds between two ISO 8601 datetime in Excel?

我有 2 个 ISO 8601 格式的日期时间字符串,例如1900-01-01 00:00:00+00:002020-03-27 23:59:59+11:00 如何仅使用 Excel 或 Excel VBA 计算这 2 个日期时间字符串之间的秒数?

所有的答案,我只碰到过计算日期部分沉绵问题问时间戳

Function TOUNIX(dt) As Long
    TOUNIX = DateDiff("s", "1/1/1970", dt)
End Function

出于理解/教育目的分解:

  • LEFT(A1,FIND("+",A1)-1)-1 - 提取日期
  • (VALUE(LEFT(A1,FIND("+",A1)-1)-1) - 将日期转换为数字( -1表示第一秒为0
  • (LEFT(MID(A1,FIND("+",A1)+1,5),2) - 从时区中提取小时
  • RIGHT(MID(A1,FIND("+",A1)+1,5),2) - 从时区中提取分钟
  • /60 - 一小时内 60 分钟
  • /24 - 一天 24 小时
  • IF(LEFT(RIGHT(A1,6),1)="-",1,-1) - 提取时区修饰符以确定时区是从值中增加还是减少
  • 结合到这里,我们有了日期的数字转换值
  • * 86400 - 一天的秒数

=(VALUE(LEFT(A1,FIND("+",A1)-1)-1)+((LEFT(MID(A1,FIND("+",A1)+1,5),2)+(RIGHT(MID(A1,FIND("+",A1)+1,5),2)/60))/24)*IF(LEFT(RIGHT(A1,6),1)="-",1,-1))*86400

如果您从 0 开始,则不需要从另一个日期中减去。 如果您想这样做,只需根据需要复制公式。

您将需要查看以下功能。

对于文本操作:

对于日期操作:

对于时间操纵:

你有几个选择。 您可以删除每个单独的值并将其放置在适当的日期/时间单独函数中,或者将日期和时间重新排列为可由时间/日期值函数识别的字符串。

Excel 中日期和时间的一些背景知识。 日期存储为整数。 1 代表 1900/1/1,2 代表 1900/1/2,以此类推。 时间以小数形式存储,代表一天的一小部分。 00:00 是午夜并存储为零,中午 12:00 存储为 0.5 表示半天。 24:00 不是正式的 Excel 时间,但某些功能可以使用它。 要测试日期/时间是存储为文本还是 Excel 数字,您可以使用ISTEXT(A1)类的ISTEXT(A1)测试单元格的值,将格式更改为常规并查看单元格信息的显示是否发生变化,以及最不可靠的是查看单元格中信息的对齐方式,默认情况下文本左对齐,数字默认右对齐。

让我们假设您的字符串存储在 A1 和 A2

因为 Datevalue 可能有点挑剔,并且有点依赖于系统设置来确定 mm 与 dd,所以我采用剥离单个组件的方法。 在您的情况下,因为所有内容都有前导零,所以可以硬编码月、日、小时、分钟和秒的位置,而不是根据 -、:、+ 和空格等关键字符搜索每个字符串的起始位置。

抓住年份:

=LEFT(A1,4)

抓住月份:

=MID(A1,6,2)

抓住这一天:

=MID(A1,9,2)

通过将结果放入 DATE 来确定日期,如下所示:

=DATE(LEFT(A1,4),MID(A1,6,2),MID(A1,9,2))

抓紧时间:

=MID(A1,12,2)

抓紧时间:

=MID(A1,15,2)

抓住秒:

=MID(A1,18,2)

通过将结果放入 TIME 来计算时间,如下所示:

=TIME(MID(A1,12,2),MID(A1,15,2),MID(A1,18,2))

为了获取时区,我将使用 TIMEVALUE 来演示另一种方法。 这将转换时区时间或十进制值而不是像上面的操作那样的文本。

获取时区:

=TIMEVALUE(RIGHT(A1,5)*IF(LEFT(RIGHT(A1,6))="-",-1,1)

然后,您只需要将结果组合在一起,以 excel 日期和时间格式获取整个内容:

=DATE(LEFT(A1,4),MID(A1,6,2),MID(A1,9,2))+TIME(MID(A1,12,2),MID(A1,15,2),MID(A1,18,2))-TIMEVALUE(RIGHT(A1,5))*IF(LEFT(RIGHT(A1,6))="-",-1,1)

现在字符串已转换为 excel 日期,您需要计算单元格中的差异,注意结果是天数。 然后您需要将其乘以 24*60*60 = 86400 将其转换为秒。

因此,如果您将结果放在 B1 和 B2 中,那么秒差的公式将是:

=(B2-B1)*24*60*60

在下面的例子中是 (F14-F12)。 另请注意,显示时间或日期和时间的单元格已应用自定义格式以显示 24 小时制或日期和时间组合。

POC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM