格式化时间从dd / mm / yyyy hh:mm:ss到yyyy.mm.dd hh:mm

我收到以下任务:将“dd / mm / yyyy hh:mm:ss”时间变为“yyyy.mm.dd hh:mm”格式。

我希望一个简单的格式(activecell.value,“yyyy.mm.dd hh:mm”)会有所帮助,但是。 在某些情况下,它的作品。 但是,在一些特殊情况下,并不是。 当这一天在01-12之间(可以与月份互换!),那么它会在几个月里混淆日子。 (可能是因为美式date格式。)

例如,原始文本string:04/06/2013 09:00:00

预计:2013.06.04 09:00

结果:2013.04.06 09:00(date和月份已交换)

我试图通过格式化input来克服它,我给它一个“dd / mm / yyyy hh:mm:ss”自定义格式。 没有帮助,它仍然交换一天和一个月。

所以我没有任何想法了,但是正则expression式。 date格式总是相同的,所以只要移动string的部分就可以了。 但是,我不知道这是如何工作和谷歌search引起混乱的结果。

谁能帮我? 当然,如果有一个更优雅的方式来做到这一点,这也是值得欢迎的。

尝试使用此自定义格式:

 yyyy/mm/dd h:mm;@ 

要进入它,请右键点击单元格,然后select格式单元格:

格式单元格

然后在Number标签下从列表框中selectCustom 。 然后在Type:文本框中input提供的格式。

例

如果这不起作用。 你是*****绝对*****积极,04/06/2013 09:00:00是2013年4月6日,而不是2013年6月4日?

如果这仍然不起作用,并且您确认date是正确的。

 Sub ChangeDateFormat() Application.ScreenUpdating = False Dim CurrentCell As Range Dim LastRow As Long Dim RegEx As Object Set RegEx = CreateObject("vbscript.regexp") RegEx.Global = True LastRow = Range("A" & Rows.Count).End(xlUp).Row 'Get The Last Row in Column Change A as Needed For Each CurrentCell In Range("A1:A" & LastRow) ' Loop through all cells. Change Column as needed If InStr(CurrentCell.Value, "/") <> 0 Then 'To make sure only convert non converted ones RegEx.Pattern = "(\d{2})/(\d{2})/(\d{4}) (\d{2}):(\d{2}):(\d{2})" ' Seperate all parts of imported Data into groups CurrentCell.Value = RegEx.Replace(CurrentCell.Value, "$3.$2.$1 $4:$5") ' Change order of groups and place into cell. End If Next Application.ScreenUpdating = True End Sub 

*****注意:*****只有当所有的date值为dd/mm/yyyy hh:mm:ss时候才会有效,如果不是,你将不得不添加一些error handling,并可能稍微修改一下代码因为这会造成问题。

这也适用于其他文本中的date。 如果A1的值是

This is a test 04/06/2013 09:00:00 Lets see what happens

那么新的价值将会是

This is a test 2013.06.04 09:00 Lets see what happens

这很简单。 。 。 只需按照下面的步骤select整个栏目甚至需要的单元格按右键并select格式单元格选项,一个选项卡窗口将从数字选项卡中selectdate,从区域设置下拉菜单中select英语(南非)所需的反向格式。 。 。 你做了:)

如果月份和date错误,则可以使用"DATE(YEAR(A1),DAY(A1),MONTH(A1))" ,date格式为"DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2))"如果是文本格式