Date(Time).FromText/ToText – Power Query爱好者

您所在的位置:网站首页 日期列转换为日期型数据 Date(Time).FromText/ToText – Power Query爱好者

Date(Time).FromText/ToText – Power Query爱好者

#Date(Time).FromText/ToText – Power Query爱好者| 来源: 网络整理| 查看: 265

官方说明:

返回dateTime(即日期时间值dateTime)的文本表示形式。此函数采用一个可选格式参数format。有关支持的格式的完整列表,请参阅库规范文档。 DateTime.ToText( dateTime as nullable datetime, optional format as nullable text, optional culture as nullable text) as nullable text  

解读:

标题简化了下,本文将介绍6个函数,分别为DateTime.FromText,DateTime.ToText,Date.FromText,Date.ToText,Time.FromText,Time.ToText。 听名字就知道,这几个函数用于对日期时间和文本之间的相互转换,语法差不多,所以只放了其中一个说明,上面提到的库规范文档在这里。

日期时间转文本:

第一参数为日期时间值,第二参数为需要格式化的格式。如现有日期时间为#datetime(2017,7,9,17,4,32),在PQ中显示为"2017/7/9 17:04:32",需要转成"2017年7月9日下午5时4分32秒"。 如果不知道这个函数你可能会分别取出每一个的值,然后用&连接得到结果,但是显然这样做太傻了。你可以直接这样= DateTime.ToText(#datetime(2017,7,9,17,4,32),"yyyy年M月d日tth时m分s秒")。没错,和DAX的format及工作表函数的text的用法差不多。需要注意的是,月(month)和分(minute)缩写都是m,所以为了区分,大写M代表月,小写m代表分。 第三参数为区域选项,比如写成= DateTime.ToText(#datetime(2017,7,9,17,4,32),null,"zh-cn"),返回的是按照我们中国人习惯的"2017/7/9 17:04:32";而如果写成= DateTime.ToText(#datetime(2017,7,9,17,4,32),null,"en-us")则返回的是按照美国人习惯的"7/9/2017 5:04:32 PM",当然还有其他区域,如果省略则默认为系统当前区域。 举几个栗子:

dt= #datetime(2017,7,9,17,4,32), a= DateTime.ToText(dt,"yyyy/MM/ddThh:mm:ss"), //"2017/07/09T05:04:32" b= DateTime.ToText(dt,"yyyy-MM-dd"), //"2017-07-09" c= DateTime.ToText(dt,"yyyy啊MM啊dd啊"), //"2017啊07啊09啊" d= DateTime.ToText(dt,"yy年M月d日"), //"17年7月9日" e= DateTime.ToText(dt,"yy年M月d日 dddd"), //"17年7月9日 星期日" f= DateTime.ToText(dt,"yy年M月d日 ddd"), //"17年7月9日 周日" g= DateTime.ToText(dt,"y年MMMM"), //"17年七月" h= DateTime.ToText(dt,"y年MMMM","en-us"), //"17年July" i= DateTime.ToText(dt,"MMM yyyy","en-us"), //"Jul 2017" j= DateTime.ToText(dt,"MMM yyyy dddd","en-us"), //"Jul 2017 Sunday" k= DateTime.ToText(dt,"MMM-dd yyyy ddd","en-us"), //"Jul-09 2017 Sun" l= DateTime.ToText(dt,"T"), //"17:04:32" m= DateTime.ToText(dt,"t"), //"17:04" n= DateTime.ToText(dt,"tt"), //"下午" o= DateTime.ToText(dt,"tt h:m:s"), //"下午 5:4:32" p= DateTime.ToText(dt,"h:m:s tt","en-us") //"5:4:32 PM" q= DateTime.ToText(dt,"HH:mm:ss") //"17:04:32"

看到这应该能了解各个字母及不同数量分别代表的意思,Date.ToText和Time.ToText同上就不一一介绍了。 可搭配出的组合远不止以上几种,请自行测试。  

文本转日期时间:

往往从系统导出的数据都是文本格式,如果格式规范PQ一般能自动识别并更改类型,但是免不了有些不规范格式会识别不了,这时候就可以尝试下FromText。 因为转成日期时间格式不需要格式化,所以只需要两个参数:第一参数为文本格式的日期时间,第二参数为区域选项。 继续看栗子,我们把刚才转换的文本格式再反过来,并又加了几条试试: 其中大部分都可以识别,大致可以从中总结出以下规律:

如果指代不明则识别不了,比如"201711",系统无法识别其中的11到底是1月1日还是11月 如果格式正确但没有提供值则默认为最小值,比如"Jul 2017"默认显示为"2017/7/1 00:00:00",日期为1,时间为0 以上两条都是猜的。。。请自行尝试

注意图中最后一条,"20170709050432",按理说应该可以识别啊可是为什么显示Error呢? 原来标准的格式在日期和时间之间有一个T,为"20170709T050432",所以得先在文本中间插入一个T:= DateTime.FromText(Text.Insert("20170709050432",8,"T")),这样就能正确的返回结果了。

打赏赞(10)微海报分享


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3