【问题标题】:Excel wrong timestamp format recognitionExcel错误时间戳格式识别
【发布时间】:2017-02-14 05:28:30
【问题描述】:

我正在尝试打开一个 CSV 文件,其中包含一个名为 ts 的列,该列在整个文件中具有以下模式的 timestamp

12/31/2016 20:40
mm/dd/yyyy hh:mm

现在,当我在 Excel 中打开它时,其中一些会被识别,而另一些则不会。

问题似乎是 Excel 会自动以 dd/mm/yyyy hh:mm 格式识别它,因此当日期为 2016 年 11 月 13 日 0:00 时,它无法识别它(因为第 13 个月)。

如何解决这个问题?

【问题讨论】:

    标签: excel date


    【解决方案1】:

    您会发现,即使 Excel 可以识别日期,它也会将月份和日期重新放在前面。

    直接打开 .csv 文件时(例如,通过在 Windows 资源管理器中双击该文件或在 Excel 中选择“文件”>“打开”),Excel 将尝试根据您的本地时间格式解析任何日期。直接打开文件时更改日期解析方式的唯一方法是更改​​本地时间格式,您可能不想这样做。

    解决方法是使用文本导入向导从 Excel 中打开文件,您可以在其中明确说明日期在文本文件中的存储格式。

    1. 打开一个新工作簿
    2. 转到数据选项卡;在获取外部数据组中,单击从文本
    3. 选择您的文件并点击导入
    4. 第 1 步:选择分隔并选择下一步
    5. 第 2 步:如果是真正的 .csv,请选择逗号作为唯一分隔符。 (请注意,从其他系统导出的数据通常是制表符分隔的,而不是逗号分隔的。但是,.csv 文件扩展名仍用于指示文件是在 Excel(或类似)中打开的。如果选择逗号不是正确拆分列,请尝试选择 Tab 作为分隔符。当您的数据已正确拆分为列后,请按下一步。)
    6. 第 3 步:选择包含日期的列,然后将列数据格式设置为日期,然后在下拉列表中选择 MDY。它应该如下所示:
    7. 点击完成
    8. 选择您希望数据去往的位置,然后单击“确定”

    您现在应该打开数据,正确解释日期并以当地日期格式 (dd/mm/yyyy) 显示。

    如果要将完整的日期和时间保留在一列中,则需要进行额外的工作,因为无法告诉 Excel 正确解释与本地格式不匹配的日期/时间字符串。

    按照上述步骤开始,但在第 6 步,选择文本作为数据格式。这对于确保 Excel 不会尝试解释任何日期(天小于 12)是必要的。

    然后,如果您的日期始终采用 mm/dd/yyyy hh:mm 格式(包括单个数字天、月和小时的前导零),则以下公式将转换单元格 A1 中的日期/时间字符串到您可以正常格式化和使用的日期/时间序列:

    =DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2)) + TIMEVALUE(RIGHT(A1,5))
    

    【讨论】:

    • 不错!但是有一个问题,如果我只有日期,它似乎可以工作,但当我有日期+时间(我在原始数据中有)时就不行。除了进一步拆分和连接之外,还有什么解决方法吗?
    • 不幸的是,没有直接的方法可以让 Excel 解释与您的本地格式不匹配的完整日期时间字符串。另一种解决方案是按照上述相同步骤将完整的日期时间字符串导入单个列,但选择文本,然后在相邻列中使用公式。我会用公式更新我的答案。
    【解决方案2】:

    发生这种情况是因为您获得的输出日期是文本格式,而不是日期格式。这是解决您的情况以获取 mm/dd/yyyy hh:mm 格式的输出的技巧。您可以将格式更改为您想要的格式。

    如果文本日期在A列中,则公式为-

    =DATE(MID(A3,SEARCH("/",$A3,SEARCH("/",$A3,1)+1)+1,4),LEFT(A3,SEARCH("/",A3,1)-1),MID($A3,SEARCH("/",$A3,1)+1,SEARCH("/",$A3,SEARCH("/",$A3,1)+1)-SEARCH("/",$A3,1)-1))+TIME(HOUR(RIGHT(A3,LEN(A3)-SEARCH(" ",A3,1))),MINUTE(RIGHT(A3,LEN(A3)-SEARCH(" ",A3,1))),SECOND(RIGHT(A3,LEN(A3)-SEARCH(" ",A3,1))))
    

    希望这会有所帮助。满意就打分。 :)

    【讨论】:

      【解决方案3】:

      我已将文本导入向导方法作为单独的答案,因为它有一些有用的信息。但是,我意识到,如果我们走在需要使用公式的道路上,那么我们还不如在正常打开文件后使用公式!

      以下公式适用于存储为 mm/dd/yyyy hh:mm 的所有日期/时间

      =IF(ISNUMBER(A1),DATE(YEAR(A1),DAY(A1),MONTH(A1))+A1-INT(A1),DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2)) + TIMEVALUE(RIGHT(A1,5)))
      

      公式首先检查 Excel 是否将该值解释为日期,当日期小于或等于 12 时会发生这种情况。如果有,则 Excel 已交换日期和月份,因此公式将它们交换回来。或者,如果 Excel 没有将该值解释为日期(当日期大于 12 时发生),它仍然是文本,并且在重新排列文本字符串后生成日期/时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-14
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多