1

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

我希望一个简单的 Format(activecell.value, "yyyy.mm.dd hh:mm") 会有所帮助,但是。在某些情况下,它可以工作。但是,在某些特殊情况下,它不会。当一天在 01-12 之间时(可以与月份互换!),那么它将把日子与月份混淆。(可能是因为美国风格的日期格式。)

例如,原始文本字符串:04/06/2013 09:00:00

预计时间:2013.06.04 09:00

结果:2013.04.06 09:00(日月互换)

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

所以我不再有想法了,只有正则表达式。日期格式始终相同,因此只需移动字符串的各个部分就可以了。但是,我不知道它是如何工作的,谷歌搜索带来了令人困惑的结果。

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

4

3 回答 3

2

尝试使用此自定义格式:

yyyy/mm/dd h:mm;@

要输入它,请右键单击单元格并选择单元格格式:

格式化单元格

然后在Number选项卡下Custom从列表框中选择。并在文本框中输入提供的格式Type:

例子

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

如果这仍然不起作用并且您已验证日期是正确的。

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

*****注意: ***** 这仅在所有日期值都为的情况下才有效,dd/mm/yyyy hh:mm:ss如果它们不是,您将不得不添加一些错误处理并可能稍微修改代码,因为它导致问题。

这也适用于其他文本内的日期。如果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

于 2013-04-22T12:42:03.177 回答
0

这很简单。. . 只需按照步骤选择整个列或什至所需的单元格按右键单击并选择格式单元格选项,将从数字选项卡选择日期打开一个选项卡窗口,从区域设置下拉菜单中选择英语(南非)从类型中的给定选项中选择您的所需的反向格式。. . 你完成了:)

于 2013-04-22T11:30:15.150 回答
0

如果月份和日期放错了位置,可以使用"DATE(YEAR(A1),DAY(A1),MONTH(A1))",前提是日期格式,"DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2))"如果是文本格式

于 2017-01-17T10:22:58.000 回答