在Excel单元格中parsing非标准的date格式

我想将格式为“2017年3月30日,05:00:00.000”的date转换为Exceldate值? 什么是最优雅的解决scheme,我可以做到这一点与使用单元格而不是VBA?

这将做标准的"rd","th","st","nd"

 =--(LEFT(A1,MIN(FIND({"rd","th","st","nd"},A1 & "thrdstnd"))-1)& ", " & SUBSTITUTE(MID(A1, MIN(FIND({"rd","th","st","nd"},A1 & "thrdstnd"))+2,LEN(A1)),",","")) 

您可以根据需要在公式中添加其他后缀

在这里输入图像说明

然后,您可以按照自己的喜好进行格式化

嵌套的IFERROR函数可以处理各种数字序号。

 =--SUBSTITUTE(REPLACE(A2, IFERROR(FIND("st ", A2),IFERROR(FIND("nd ", A2),IFERROR(FIND("rd ", A2), IFERROR(FIND("th ", A2), LEN(A2))))), 3, ", "), ", ", " ",2) 

在这里输入图像说明

我使用了[Color10]mmmm dd, yyyy hh:mm:ss.000;;;[Color3]@的自定义数字格式。 除了文本是左alignment的,而且真正的date是右alignment的这个事实之外,这将会把文本看起来像date的文字看成是红色字体,真正的date是绿色的。

如果你想要一个真正的date,并想要删除时间部分,那么:

 =DATEVALUE(SUBSTITUTE(LEFT(A1,FIND(",",A1)-1),"th",",")) 

你需要嵌套SUBSTITUTE()函数来处理“nd”和“st”序号,如果你有它们的话:

 =DATEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LEFT(A1,FIND(",",A1)-1),"th",","),"nd",","),"st",",")) 

在这里输入图像说明