日期的转换与逆转换

在工作中常常会遇到不规范的日期,当需要处理与时间相关的问题(比如,时间的区间匹配)就需要把文本型的日期转化为真正的日期(或者整数型日期),否则就会引发错误,因为Power Query不像Excel或者Power Pivot那样会自动为数据进行转换。以下为数种常见的转换(示例日期为2020年01月31日):

情景一(数字转日期):

let
    Soluntion = Date.From( Number.ToText( 20200131, "0000-00-00" ) )
in
    Soluntion

情景二(日期转数字):

let
    Solution = Int64.From( Date.ToText( #date( 2020, 01, 31 ), "yyyyMMdd" ) )
in
    Solution

情景三(文本转日期):

let
    Solution = Date.From( Text.Combine( List.Reverse( Text.Split( "31.01.2020", ".") ), "-" ) )
in
    Solution

情景四(日期转文本):

= Date.ToText( #date( 2020, 01, 31), "dd.MM.yyyy" )

情景五(文本短日期转日期):

let
    fnTextToDate =
        ( DateInText as text, Century as number ) =˃
            let
                SplitByStop =
                    Text.Split(
                        DateInText,
                        "."
                    ),
                Transform =
                    List.Transform(
                        SplitByStop,
                        each Int64.From( _ )
                    ),
                Result =
                    #date(
                        Transform{2} + Century * 100,
                        Transform{1},
                        Transform{0}
                    )
            in
                Result
in
    fnTextToDate("31.01.20", 20 )

情景六(日期转文本短日期):

= Date.ToText( #date( 2020, 01, 31), "dd.MM.yy" )

文本型的日期需要往“yyyy-mm-dd”的形式转换,因为只有这种形式不会因为计算机的日期制式产生歧义。

5 Replies to “日期的转换与逆转换”

  1. 文本值借助拆分、重组函数或者Text.Format向"yyyy-MM-dd"转换以便被Date.From精确识别;日期转数值则以文本格式过渡,整体堆砌去除分隔符,or转为日期对应的数字值。

  2. 情景三好像不需要那么复杂,用以下即可实现:
    Solution =Date.FromText( "31.01.2020" ,[Format="dd.MM.yyyy"])

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注