8

我已经导入了一个包含 2 个长日期列的 CSV 文件。这些日期采用美国格式Aug/28/2013,我希望它们采用标准英国dd/mm/yyyy格式。

我尝试将单元格格式化为美国日期,然后将它们转换为纯数字格式,以及日期格式框中的各种其他排列,但没有成功。

谁能帮我摆脱这些糟糕的美国约会?

4

11 回答 11

16

不使用公式的另一种解决方案:

  • 选择相关列
  • 选择数据 → 文本到列…</li>
  • 选择“分隔”并单击Next
  • 取消所有分隔符并单击Next
  • 选择数据列格式“日期:MDY”并单击Finish

现在应将日期转换为英国日期。

于 2015-03-26T10:52:04.327 回答
6

问题是当日期小于 13 时,Excel 可以将美国日期解析为英国日期。发生这种情况时,Excel 会将其转换为本地化的英国序列号(日期)。

所以 03/19/2014 显然是 3 月 19 日的美国日期。但是 05/03/2014 不明确,因此 Excel 将其解析为 3 月 5 日的本地日期格式,而不是美国 5 月 3 日。任何公式都必须检查 Excel 是否将美国日期存储为英国日期。英国日期将作为数字存储在 Excel 中。

=IF(ISNUMBER(A2),DATE(TEXT(A2,"yyyy"),TEXT(A2,"dd"),TEXT(A2,"mm")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2)))

(对于单元格 A2 中的美国日期和 PC 日期为 dd/mm/yy)。

如果ISNUMBER为真,则美国日期看起来像英国日期,Excel 已将其序列化为数字。因此可以将日期格式化为文本并再次返回日期。注意 day 被传递给第一个 DATE 函数的 month 参数以执行转换。如果ISNUMBER为 false,则将其存储为字符串,因为 Excel 不会转换大于 12 个月的日期字符串。因此,使用字符串函数将其拆分为 DATE 函数。

于 2014-03-04T22:04:06.083 回答
2

我假设您收到的日期被格式化为文本,并且简单地将其格式化为日期并没有改变任何内容。您可以在日期上运行以下公式:

=(MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1)&"-"&LEFT(A1,FIND("/",A1)-1)&"-"&RIGHT(A1,4))*1

如果你得到数字,你只需要格式化它dd/mm/yyyy,它应该是好的。

于 2013-08-28T12:17:19.013 回答
1

我尝试了其他一些建议,但似乎没有一个对我有用。就我而言,我以 M/d/yyyy hh:mm:ss 的形式导入美国日期。如果您不介意在电子表格中使用一些 VBA,那么以下函数为我完成了这项工作:

Public Function USDate(ds As Variant) As Variant
    Dim sp() As String
    Dim spt() As String
    Dim spt2() As String

    If ds = vbNullString Then
        USDate = ""
    ElseIf IsNumeric(ds) Then 
        ' Convert numeric US dates wrongly interpreted as UK i.e. 1/7/2017 as 7th January 2017
        USDate = DateSerial(Year(ds), Day(ds), Month(ds)) 
    Else
        sp = Split(ds, "/") ' split the date portion
        spt = Split(sp(2), " ") ' split the time from the year
        spt2 = Split(spt(1), ":") 'split the time hms

        USDate = DateSerial(spt(0), sp(0), sp(1)) + TimeSerial(spt2(0), spt2(1), spt2(2))
    End If
End Function

感谢https://stackoverflow.com/users/845584/peterx指出 - 您需要在 VBA 代码模块中创建函数才能使用此技术。

只需在电子表格公式中使用它,例如 =USDate(A2)

于 2017-03-21T12:21:39.230 回答
0

与此相关,以下简单的公式有助于更改日期

“月/日/年”

进入

“日/月/年”。

=VALUE(TEXT(B2,"mm/dd/yyyy"))
于 2014-09-29T12:05:13.107 回答
0

通过这个更简洁的公式,我们可以两全其美:

=IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2)))

找不到更短的。

于 2015-11-06T16:58:27.213 回答
0

上面看起来非常复杂!为什么任何国家都应该采用非连续日期格式,这让我无法理解!假设您在单元格 A1 中有一个美国格式的日期 ( mm/dd/yy)。要将其转换dd/mm/yy为英国的格式,只需执行以下操作:

=CONCATENATE(MID(A1,4,2),"/",MID(A1,1,2),"/",MID(A1,7,2)) 

这当然适用于 LibreOffice,我希望也适用于 Excel。

于 2021-12-09T22:27:02.287 回答
0

假设您以字符串开头(而不是刚刚格式化为美国格式的内部 excel 日期编号 - 这是一个简单的解决方法),有人可以告诉我为什么这种方法不起作用吗?

使用 DATEVALUE / TIMEVALUE 函数将其转换为 excel 内部格式化日期数字(您可能需要 MID() 字符串,以防之前或之后有额外的位)。

只需确保您的区域设置与输入日期格式匹配(否则 DATEVALUE 将失败并且您将收到 #VALUE 错误)。

然后设置单元格格式以显示您想要的方式(自定义格式,例如“dd/mm/yyyy hh:mm:ss”)。

如果您还想更改时区,您可以将 (小时/24) 添加到内部 Excel excel 格式的日期编号。

于 2019-10-28T13:21:16.180 回答
0

对我来说还有一个问题,因为不知何故原始数据应该被读取为数字,但事实并非如此。因此,我用 1 个最终案例更新了公式:

=IFERROR(IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1) ,MID(A2,FIND("/",A2)+1,2))),DATE(右(A2,4),左(A2,FIND("/",A2)-1),MID(A2,查找(“/”,A2)+1,1)))

于 2016-12-06T03:08:02.040 回答
0

当日期为混合格式时,这可能会很棘手,例如。英国和美国在同一列。我找到了一个有效但不优雅的解决方案:

Step1) Select the column containing the dates to be converted;

Step2) Format, Cells, Text;

Step3) Format, Cells, Date, US;

Step4) Data, Text to column, Next, Delimited, Next, delete all delimiters, Next, select format MDY;

Step5) Format, Cells, Date, UK.

Step4 已在其他地方提出,但它本身并没有为我做。我希望将这些步骤组合成一个宏,但到目前为止还没有成功。

于 2017-01-01T16:45:46.253 回答
0

我无法得到最常见的工作答案,对我有用的过程是:

对于日期10/04/2018 11:49:20,右键单击单元格和“单元格格式”,“数字”选项卡并选择“自定义”类别,然后选择mm/dd/yyyy hh:mm

于 2018-11-14T12:20:43.913 回答