【问题标题】:How to represent a DateTime in Excel如何在 Excel 中表示日期时间
【发布时间】:2009-06-11 15:01:32
【问题描述】:

在 Excel 中表示DateTime 的最佳方式是什么?我们使用 Syncfusions Essential XlsIO 将值输出到 Excel 文档,效果很好。但我不知道如何在列中显示DateTime。也不是直接在Excel中自己做的。不可能吗?我必须使用单独的日期和时间列吗?我真的希望我不这样做,因为它会破坏排序等...除非 Excel 有一些聪明的方法可以解决这个问题...

【问题讨论】:

    标签: excel datetime


    【解决方案1】:

    Excel 中日期时间的基础数据类型是 64 位浮点数,其中一天的长度等于 11st Jan 1900 00:00 等于 1。所以11th June 2009 17:30 大约是39975.72917

    如果单元格包含这样的数值,只需将日期时间格式应用于单元格即可将其转换为日期时间。

    因此,如果您可以使用上述公式将日期时间转换为数字,请将它们输出到相关单元格,然后将单元格格式设置为适当的日期时间格式,例如yyyy-mm-dd hh:mm:ss,那么应该可以实现你想要的。

    另外,Stefan de Bruijn 指出 Excel 中存在一个错误,它错误地假定 1900 年是闰年,因此您在计算时需要考虑到这一点 (Wikipedia)。

    【讨论】:

    • 不幸的是,这是不正确的。如果单元格 A2 = 1-1-1900 并且您执行 Value(A2),您将得到“1”。此外,Excel 错误地假定 1900 年是闰年(在所有计算中)。换句话说,在使用您最喜欢的编程语言时,您可能需要减去 2 天才能得到正确的日期...
    • 感谢 Stefan de Bruijn,我已经更正了答案并添加了关于闰年错误的注释。
    • 请注意,日期时间格式取决于 Excel 语言。例如,西班牙语应该是:aaaa-mm-dd hh:mm
    【解决方案2】:

    如果像我一样,您在格式对话框的日期或时间下找不到日期时间,您应该可以在“自定义”中找到它。

    我刚刚从“自定义”中选择了“dd/mm/yyyy hh:mm”,并对结果感到满意。

    【讨论】:

    • 以上内容似乎不适用于 Excel for Mac :(
    • @BrantleyBeaird 我没有 Mac,但你不能在自定义字符串中输入 'dd/mm/yyyy hh:mm' 吗?截图:imgur.com/a/51ipd
    • 我这样做了,然后添加了 ":ss" 以包含秒数。
    • 您也可以按照它设置的示例来编辑自定义的:我将我的修改为 yyyy/mm/dd hh/mm/ss 以获得 2021/07/26 13:51 的输出: 37
    【解决方案3】:

    您可以执行以下操作:

    =Datevalue(text)+timevalue(text)

    进入不同类型的日期格式并选择:

    dd-mm-yyyy mm:ss am/pm

    【讨论】:

    • 为什么要做Datevalue(text)+timevalue(text)?只需在单元格中设置格式即可。
    【解决方案4】:

    某些版本的 Excel 在标准选择列表中没有可用的日期时间格式,但您可以输入自定义格式字符串,例如 yyyy-mm-dd hh:mm:ss by:

    1. 右键 -> 设置单元格格式
    2. 数字标签
    3. 选择自定义类别
    4. 在“类型”字段中输入您的自定义格式字符串

    这适用于我的 Excel 2010

    【讨论】:

    【解决方案5】:

    Excel 可以以与 DateTime 类似的方式显示 Date 类型。右键单击受影响的单元格,选择 Format Cells,然后在 Category 下选择 Date 并在 Type 下选择类型看起来像这样:

    3/14/01 1:30 PM
    

    这应该符合您的要求。我用这种格式测试了一些样本数据的排序,它似乎工作正常。

    【讨论】:

    • 这实际上是真的......你知道是否可以从 C# 中以特定文化的方式设置它? .NET 中的标准日期时间格式字符串可以在 excel 中使用吗?
    • 如果数据作为字符串从 .NET 导出到 Excel,并且看起来与我的示例类似,那么在格式化单元格时它应该可以工作。至于文化特异性(?),有大量的自定义格式(即 Excel 中的类别是自定义)可能会提供您正在寻找的内容。
    • 我的 Excel 版本(2003)没有带时间的日期选项
    • 如果您的 Excel 版本没有标准的日期时间格式,您可以将其作为自定义字段输入,如下面我的回答所述。
    • 我在 Excel 2013 中有它,但我必须先在类型部分下方的区域设置框中选择“英语(美国)”。
    【解决方案6】:

    Excel 希望将日期和时间存储为浮点数,其值取决于工作簿的 Date1904 设置,加上数字格式,例如“mm/dd/yyyy”或“hh:mm:ss”或“ mm/dd/yyyy hh:mm:ss" 以便将数字作为日期/时间显示给用户。

    使用SpreadsheetGear for .NET 你可以这样做: worksheet.Cells["A1"].Value = DateTime.Now;

    这会将 DateTime 转换为双精度类型,这是 Excel 用于日期/时间的基础类型,然后根据值自动使用默认日期和/或时间数字格式格式化单元格。

    SpreadsheetGear 还具有 IWorkbook.DateTimeToNumber(DateTime) 和 NumberToDateTime(double) 方法,可将 .NET DateTime 对象转换为 Excel 可以使用的 double。

    我希望 XlsIO 也有类似的东西。

    免责声明:我拥有 SpreadsheetGear LLC

    【讨论】:

      【解决方案7】:

      您可以使用以下选项之一将日期时间值设置为 XlsIO 中的单元格

      sheet.Range["A1"].Value2 = DateTime.Now;
      sheet.Range["A1"].NumberFormat = "dd/mm/yyyy";
      
      sheet.Range["A2"].DateTime = DateTime.Now;
      sheet.Range["A2"].NumberFormat = "[$-409]d-mmm-yy;@";
      

      您可以找到更多信息here

      【讨论】:

      【解决方案8】:

      dd-mm-yyyy hh:mm:ss.000 通用可排序日期/时间模式

      【讨论】:

      • 你的意思是yyyy-mm-dd hh:mm:ss.000吗?还有类似的 ISO8601 格式:YYYY-MM-DDThh:mm:ssTZD(这些限制是,虽然可以排序,但它们仍然是字符串,所以你不能对它们应用 Excel 日期函数)
      • 是的,你说得对,并且使用大写的 HH 到 24 小时格式。 yyyy-mm-dd HH:mm:ss.000
      • 投了反对票,因为我不认为这是一个非常完整或正确的答案,对不起。
      • 这不是可排序的或通用的。您需要将年份放在首位。
      猜你喜欢
      • 2017-03-18
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多