Excel错误的时间戳格式识别

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

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

现在,当我在Excel中打开它时,其中一些不被认可。

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

在这里输入图像说明

如何解决这个问题?

即使Excel识别date,也会发现date与月份相同。

当直接打开一个.csv文件时(例如,通过从Windows资源pipe理器中双击或从Excel中select“文件”>“打开”),Excel将根据当地的时间格式尝试parsing任何date。 当直接打开文件时,更改dateparsing方式的唯一方法是更改​​您可能不想执行的本地时间格式。

解决方法是使用“文本导入向导”在Excel中打开文件,您可以在其中明确指出date已存储在文本文件中的格式。

  1. 打开一个新的工作簿
  2. 转到数据选项卡; 在获取外部数据组中,单击来自文本
  3. select您的文件,然后单击导入
  4. 步骤1:select分隔,然后select下一步
  5. 第2步:如果它是一个真正的.csv,select逗号作为唯一的分隔符。 (请注意,从其他系统导出的数据通常以制表符分隔,而不是用逗号分隔,但.csv文件扩展名仍然用于指示文件是以Excel(或类似的)打开的,如果select逗号不是请正确拆分您的列,请尝试selectTab作为您的分隔符。如果您的数据已正确拆分为列,请按下一步。
  6. 第3步:select具有date的列,然后将列数据格式设置为date,然后在下拉列表中selectMDY。 它应该是这样的: 文本导入向导
  7. 点击完成
  8. select你想要的数据去,然后单击确定

您现在应该打开数据,正确解释date,并以当地date格式(日/月/年)显示。

如果您想将完整的date和时间保存在一列中,则需要额外的工作,因为无法告诉Excel正确解释与本地格式不匹配的date/时间string。

首先按照上面的步骤,但在第6步,select文本作为数据格式。 这是确保Excel不会解释任何date(dateless于12)的必要条件。

然后,如果date总是以mm / dd / yyyy hh:mm格式(包括单个数字日,月和小时的前导零),则以下公式将将单元格A1中的date/时间string转换为date/时间序列,你可以格式化和正常工作:

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

这是因为你得到的输出date是文本格式,而不是date格式。 这里是解决你的情况的技巧,以mm / dd / yyyy hh:mm格式得到输出。 您可以将格式更改为所需的格式。

如果文本date在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)))) 

在这里输入图像说明

希望这可以帮助。 如果满意的话。 🙂

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

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

 =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是否已将该值解释为date,如果该date小于或等于12,则发生该date。如果有,则Excel将date和月份互换,以便公式将其交换回来。 或者,如果Excel没有将该值解释为date(发生在date大于12时),它仍然是文本,重新排列文本string后会生成date/时间。