在Excel中以文字显示日期,反之亦然

时间:2018-12-27 12:15:29

标签: python excel pandas datetime python-datetime

我已经看到excel可以识别具有特定序列号的日期。例如:

    09/07/2018 = 43290
    10/07/2018 = 43291

我知道我们使用DATEVALUEVALUETEXT函数在这些类型之间进行转换。

但是这种转换背后的逻辑是什么?为什么43290代表09/07/2018

此外,如果我在dataframe(Python)中以数字格式列出了这些日期,如何将这个数字转换为日期格式?

与时间类似,我看到十进制值代替常规时间格式。这些时间转换背后的逻辑是什么?

以下评论中给出的问题是有启发性的,但不能回答我有关日期和文本格式之间转换背后逻辑的问题: convert numerical representation of date (excel format) to python date and time, then split them into two seperate dataframe columns in pandas

1 个答案:

答案 0 :(得分:2)

这只是自1900年1月1日以来的天数(如果谈论日期和时间,则为天数):

  

DATEVALUE函数将以文本形式存储的日期转换为   Excel识别为日期的序列号。例如,   公式= DATEVALUE(“ 1/1/2008”)返回39448,即   日期1/1/2008。不过请记住,您计算机的系统日期   设置可能导致DATEVALUE函数的结果与   这个例子   
...
  Excel将日期存储为顺序序列号,以便可以在计算中使用它们。默认情况下,1900年1月1日为序列号1,而2008年1月1日为序列号39448,因为它是1900年1月1日之后的39447天。

来自DATEVALUE docs

  

如果我在数据框中以数字格式列出了这些日期   (Python),如何将该数字转换为日期格式?

由于我们知道此数字表示自1900年1月1日以来的天数,因此可以轻松将其转换为日期:

from datetime import datetime, timedelta

day_number = 43290

print(datetime(1900, 1, 1) + timedelta(days=day_number - 2))
#  2018-07-09 00:00:00                                   ^ subtracting 2 because 1/1/1900 is
#                                                          "day 1", not "day 0"

但是pd.read_excel应该能够自动处理此问题。