Excel是怎样表示日期和时间的?我们看到的不一定是真实的!通常,我们在单元格中按惯用的日期格式输入数据时,Excel会自动将其转换成日期。下图是我在单元格中输入日期和时间并设置完格式后的样子:
Excel是怎样表示日期和时间的?我们看到的不一定是真实的!通常,我们在单元格中按惯用的日期格式输入数据时,Excel会自动将其转换成日期。下图是我在单元格中输入日期和时间并设置完格式后的样子:
图1
这只是我们看到的样子,实际上Excel是按下图所示的数字来存储这个日期和时间的:
图2
也就是说,在Excel中,日期和时间都是一个数字,日期为整数部分,时间为小数部分。日期是一个序列号,表示自1900年1月1日以来的天数。序号1对应1900年1月1日,序号2对应1900年1月2日,依次类推。时间表示为一个单位为24小时的小数,其范围为0~1。起始点在午夜,其序号为0,正午的时间序号为0.5。上图中可以看出,2017年8月26日的序号为42973,上午9时1分表示为.38。
在Excel中,时间的最小单位是千分之一秒,时间序列号表示为23:59:59.999。
一分钟约等于0.00069444,即1/(24*60)。
一秒钟约等于0.00001157,即1/(24*60*60)。
1900年之前的日期怎么办
正如前文所,Excel是以1900年1月1日开始的序号来存储日期的,如果输入1900年1月1日之前的日期,Excel将会以文本的形成存储,因此不能对其进行格式、计算等操作。
在单元格中输入日期和时间
只要遵循下列规则,Excel都会自动将输入视为日期和时间。
使用斜杠(/)或者连字符(-)连接年月日
使用冒号(:)连接时分秒
输入××年×月×日或×时×分
同时输入日期和时间时,在日期和时间之间使用空格分开
查找日期
如果只是按单元格中显示的内容来查找日期,有时候会找不到数据,如下图所示。
图3
必须按照公式栏中显示的格式输入要查找的内容,才能正确找到单元格,如下图所示。
图4
日期计算
由于Excel以数字序号存储日期和时间,因此它们可以使用公式进行加减运算。下图所示的公式计算2017年已经过了多少天:
图5
计算累计的时间值
由于Excel表示时间的方式,当我们将时间值累加起来时,如果超过24小时,将自动增加1天。此时,可以设置单元格数字格式为:
[hh]:mm
如下图所示:
图6
Excel的一些处理日期和时间的函数及示例
NOW()函数获取当前的日期和时间。
TODAY()函数获取当前的日期。
这两个函数都会在用户编辑公式、输入另一个公式、工作表重新计算或者打开工作簿时更新为最新日期或时间,因此它们的值是动态的。
DATE()函数返回日期。如果单元格A1中的文本是20170829,要将其转换成日期,则可以使用下面的公式:
=DATE(LEFT(A1,4),MID(A1,5,2),RIGHT(A1,2))
DATE()函数会自动调整参数为正确的日期,下面的公式:
=DATE(2017,7,32)
返回2017-8-1。
TIME()函数返回时间。
DATEVALUE函数和TIMEVALUE()函数返回代表日期和时间的序列号和小数,其参数应该是文本形式的日期和时间,否则会得到#VALUE!错误。
YEAR()函数、MONTH()函数和DAY()函数分别提取日期中的年月日。
HOUR()函数、MINUTE()函数和SECOND()函数分别返回时间中的时分秒。注意,要在指定的时间基础上增加时分秒,需要进行相应的换算。换算基准为:1小时表示为1/24,1分钟为1/(24*60),1秒种为1/(24*60*60)。因此,如果要在现在的时间上加5小时30分50秒,则应加上5*(1/24)+30*(1/(24*60))+50*(1/(24*60*60))。
NETWORKDAYS()函数可以求出指定项目开始日期、结束日期、假期时的工作日天数。
WORKDAY()函数可以求出从某日期开始,经过指定天数并扣除假期后的结束日期,也可以获取某个日期是星期几。
图7
DAYS()函数返回两个日期之间的天数。
WEEKNUM()函数返回指定的日期在所给年份中的周数。
EDATE()函数返回从起始日期开始k个月前或后的日期。
EOMONTH()函数返回起始日期之前或之后k个月的月底日期。
DATEDIF()函数以指定的格式单位返回两个日期之差。
下面的公式返回任何当前月份的最后一天:
=DATE(YEAR(C1),MONTH(C1)+1,0)
虽然月份的最后一天会是28、29、30或31,但任何月份的最后一天都是下一月份的前一天。单元格C1中包含要返回当前月份最后一天的日期。
下面的公式计算准确的年龄:
=YEAR(NOW())-YEAR(Birthday)-(DATE(YEAR(NOW()),MONTH(Birthday),DAY(Birthday))>NOW())
公式的关键点是判断当前日期是否大于生日,若还没有过生日,则减1,否则保持不变。公式中的Birthday为生日。
下面的公式计算准确的时间差:
=IF(EndTime<StartTime,1+EndTime-StartTime,EndTime-StartTime)
其中,StartTime为开始时间,EndTime为结束时间。当工作开始于前天晚上,结束于当天上午时,上述公式能计算准确的时间差。