我正在尝试将GMT小时的列转换为用户指定的时区。
当VBA尝试从01:00减去18000秒(GMT-5)时,我收到错误。
Selected_GMT = -18000
CellValue = "1/0/00 01:00"
New_Time = DateAdd("s", Selected_GMT,CellValue)
是否发生此错误,因为VBA无法确定00:00之前的小时数? 我已经找出了Selected_GMT的秒数,我该如何使用它来确定New_Time?
答案 0 :(得分:0)
正如ooo在上面的评论中指出的那样,1/0/00是无效的日期代码。然而,即使这是你问题中的拼写错误,日期使用2位数年份代码的事实也会引发“第00年哪一年”的问题。如果您已经知道这一点,请道歉,但下面我已经从我在其他地方写过的内容中提取了Excel日期的工作概况。相关部分是“零日和以前的Excel”;如果“00”实际上代表单元格中的* 19 * 00(如果您刚刚在01:00作为单元格条目打孔),那么您将遇到问题从中减去。在这种情况下,可能明确输入日期和时间(可能使用当前日期)但使用格式隐藏日期组件):
Excel使用“日期序列”系统,其中包含您使用的任何日期 计算表示为正整数值。那个整数 值是从任意开始日期计算的。添加整体 数字到特定的序列日期会让你前进 一次一天的日历,减去整数就会让你感动 向后...只要你没有超过的开始日期 序列号系统并以负值结束。时代是 表示为一天的分数; 0.25分钟,早上6分,中午0.5分,0.75分 下午6点等等。
Excel日期
对于Excel for Windows,开始日期是1900年1月1日。也就是说,如果在Excel中的单元格中输入值1 并将其格式化为日期,您将看到该值为1900年1月1日 将是1900年1月2日,1月3日3日,依此类推。 367 代表1901年1月1日,因为Excel将1900年视为一个 闰年366天。换句话说,每一天都过去了 在序列日期加1。
重要的是要记住,上述内容仅与Excel相关,并且 不要访问,SQL Server或其他数据库产品(或Visual Basic, 对于这个问题)。例如,在Access中,有效日期的范围是 9999年1月1日至12月31日,可存储的范围相同 在具有Date数据类型的VB或VBA变量中。
Excel和Macintosh
Macintosh系统使用的开始日期为1904年1月1日,巧妙地绕过了1900年的闰年问题。不过那个 是否意味着序列日期之间存在4年的差异 在Excel for Windows中创建的工作簿中的值,以及在其中创建的值 适用于Mac的Excel。幸运的是工具 - >选项 - >计算 (在2007年之前的Excel版本上),您将找到一个名为的工作簿选项 1904年日期制度。如果选中,则Excel知道该工作簿 来自Macintosh,将调整其日期计算 相应
Excel时间
如引言中所述,时间计算为a 一天的一小部分。例如,1.5表示1900年1月2日中午。 1.75代表1900年1月2日下午6点。
(关于1900年闰年虫的消息)
从1900年3月1日起,Excel的日期是正确的,但如果您格式化 数字1使用格式dddd,mmmm dd,yyyy你会得到的 结果1900年1月1日星期日。这是不正确的; 1900年1月1日是一个 星期一,不是星期天。这一天的错误一直持续到您到达为止 3月1日,这是Excel日历中第一个真正正确的日期。
零日和之前的Excel
如果使用零值并显示它 在日期格式中,您将获得1900年1月0日星期六的无意义日期。 如果您尝试将负值格式化为日期,那么您将获得一个 细胞充满了哈希标记。同样,如果您尝试获取日期序列 使用Excel函数的数字,如DateValue,你只能这样做 1900年1月1日或之后的日期。尝试指定更早的日期 日期将导致错误。
1904(Macintosh)系统从零开始。 (1904年1月1日有一个 值为0,而不是1. Excel的在线帮助将Mac系统描述为 从1月2日开始,但这可能比解释更容易 用户为什么序列日期值0适用于Mac但不适用于Excel。) 负数不会产生错误,但数字会是 被视为绝对的。也就是说,1和-1都将被视为2 1904年1月。