【问题标题】:Date to text and vice versa in excel [duplicate]Excel中的日期到文本,反之亦然[重复]
【发布时间】:2019-05-25 11:25:00
【问题描述】:

我看到 excel 用特定的序列号识别日期。例如:

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

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

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

另外,如果我在 dataframe (Python) 中有一个数字格式的这些日期列表,我如何将这个数字转换为日期格式?

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

在 cmets 中给出的以下问题提供了信息,但没有回答我关于日期和文本格式之间转换背后的逻辑的问题: convert numerical representation of date (excel format) to python date and time, then split them into two seperate dataframe columns in pandas

【问题讨论】:

    标签: python excel pandas datetime python-datetime


    【解决方案1】:

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

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

    来自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 应该能够自动处理这个问题。

    【讨论】:

    • 是的。这几乎概括了它。实际上,这些数据存在于 xlsb 文件中。我因为没有名为 read_xlsb 的函数,所以我写了一个函数来读取它。但结果是,不知何故,这个日期被转换成数字格式,所以 read_excel 无济于事。不过,您的解决方案目前似乎运行良好。
    • 时间呢?例如,0.516550926 指的是12:23:50。如何执行此转换?其背后的逻辑是什么?
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多