如何在脚本加载器中将四位 Julian (yddd) 转换为 Gregorian (mm/dd/yy, 等等)?
How to convert four-digit Julian (yddd) to Gregorian (mm/dd/yy, etc.) in script loader?
目标
让数据脚本处理逻辑并通过 QlikSense/QlikView 折线图转换为 parsable/readable 的日期格式。又名它需要是一个正常的格式。 (YYYYMMDD, MM/DD/YY, 等等)
上下文
- 与日期相关的所有 table 都在一个 table 中。
- 日期数据所在的字段称为"date",并在Qliksheets中使用
[Date]
成功引用
ddd
是一年中的第几天。 y
是年份的最后一位。十年假设为 2010 年代,因此我们可以安全地在数字前添加“201”,为您提供年份。
Examples of four-digit Julian: 9001 is January 1st, 2019. 9283 is October 10th, 2019
我试过的
我一直在简单地在提供的四位数字的第一位数字前添加“201”,然后计算该四位数字的 last/next 三位数字。
目前,我什至还没有进入计算部分,因为我什至无法让字符串连接工作。我的所有尝试都围绕以下内容进行传播:
[AwesomeSheet]:
LOAD
Right([Date], 3) as JulianDay, // Get day
Left([Date], 1) as JulianYearSingleDigit, // Get year
201 & JulianYearSingleDigit & JulianDay as TempField // Attempt to concatenate the numbers
// Here be the JulianDay calculation
Date#([TempField], 'YYYYMMDD') as FormattedDate // Format into readable format for line graph
FROM [my-awesome-file.csv];
可能的解决方案是获取年份开始日期,加上天数并转换为日期:
date(
date#( '201' & left([Date], 1) & '0101', 'YYYYMMDD')
-1
+ num( mid([Date], 2,4) )
)
计算在做什么:
- 获取日期
left([Date], 1)
的第一个字符
- 添加
201
以将其格式化为年份数字 '201' & left([Date], 1)
- 向其添加
0101
'201' & left([Date], 1) & '0101'
(此时这部分将等于 20190101
(作为字符串))
date#( '201' & left([Date], 1) & '0101', 'YYYYMMDD')
- 这将 "tell" Qlik 里面的字符串是格式为 YYYYMMDD
的日期
- 我们将在年份开始处添加天数(原始字符串的最后 3 个符号)
num( mid([Date], 2,4) )
- 全部投射到现在
结果9283
= 10/10/2019
因此您的脚本将如下所示:
[AwesomeSheet]:
LOAD
date(
date#('201' & left([Date], 1) & '0101', 'YYYYMMDD')
-1
+ num( mid([Date], 2,4) )
) as FormattedDate
FROM [my-awesome-file.csv];
这是一种可能的方式。可能有 shorter/easier 方法,但这是我的想法
听起来您想要的是 dayOfYearToYmd 转换器 - 这可能会有所帮助 "Convert day of year to datetime in SQL Server"
此外,这些可能有助于了解 Julian 日期的概念:
https://en.wikipedia.org/wiki/Julian_day
http://www.fourmilab.ch/documents/calendar/
Julian days simply enumerate the days and fraction which have elapsed since the start of the Julian era, which is defined as beginning at noon on Monday, 1st January of year 4713 B.C.E. in the Julian calendar.
,即参考日期之前的任何日期都是负值,之后的任何日期都是正值,这与您的 post.
不符
鉴于上述情况,您可以将每个日历年的开始声明为参考日期。 :)
目标
让数据脚本处理逻辑并通过 QlikSense/QlikView 折线图转换为 parsable/readable 的日期格式。又名它需要是一个正常的格式。 (YYYYMMDD, MM/DD/YY, 等等)
上下文
- 与日期相关的所有 table 都在一个 table 中。
- 日期数据所在的字段称为"date",并在Qliksheets中使用
[Date]
成功引用
ddd
是一年中的第几天。y
是年份的最后一位。十年假设为 2010 年代,因此我们可以安全地在数字前添加“201”,为您提供年份。Examples of four-digit Julian: 9001 is January 1st, 2019. 9283 is October 10th, 2019
我试过的
我一直在简单地在提供的四位数字的第一位数字前添加“201”,然后计算该四位数字的 last/next 三位数字。
目前,我什至还没有进入计算部分,因为我什至无法让字符串连接工作。我的所有尝试都围绕以下内容进行传播:
[AwesomeSheet]:
LOAD
Right([Date], 3) as JulianDay, // Get day
Left([Date], 1) as JulianYearSingleDigit, // Get year
201 & JulianYearSingleDigit & JulianDay as TempField // Attempt to concatenate the numbers
// Here be the JulianDay calculation
Date#([TempField], 'YYYYMMDD') as FormattedDate // Format into readable format for line graph
FROM [my-awesome-file.csv];
可能的解决方案是获取年份开始日期,加上天数并转换为日期:
date(
date#( '201' & left([Date], 1) & '0101', 'YYYYMMDD')
-1
+ num( mid([Date], 2,4) )
)
计算在做什么:
- 获取日期
left([Date], 1)
的第一个字符
- 添加
201
以将其格式化为年份数字'201' & left([Date], 1)
- 向其添加
0101
'201' & left([Date], 1) & '0101'
(此时这部分将等于 20190101
(作为字符串))
date#( '201' & left([Date], 1) & '0101', 'YYYYMMDD')
- 这将 "tell" Qlik 里面的字符串是格式为YYYYMMDD
的日期
- 我们将在年份开始处添加天数(原始字符串的最后 3 个符号)
num( mid([Date], 2,4) )
- 全部投射到现在
结果9283
= 10/10/2019
因此您的脚本将如下所示:
[AwesomeSheet]:
LOAD
date(
date#('201' & left([Date], 1) & '0101', 'YYYYMMDD')
-1
+ num( mid([Date], 2,4) )
) as FormattedDate
FROM [my-awesome-file.csv];
这是一种可能的方式。可能有 shorter/easier 方法,但这是我的想法
听起来您想要的是 dayOfYearToYmd 转换器 - 这可能会有所帮助 "Convert day of year to datetime in SQL Server"
此外,这些可能有助于了解 Julian 日期的概念:
https://en.wikipedia.org/wiki/Julian_day
http://www.fourmilab.ch/documents/calendar/
Julian days simply enumerate the days and fraction which have elapsed since the start of the Julian era, which is defined as beginning at noon on Monday, 1st January of year 4713 B.C.E. in the Julian calendar.
,即参考日期之前的任何日期都是负值,之后的任何日期都是正值,这与您的 post.
不符鉴于上述情况,您可以将每个日历年的开始声明为参考日期。 :)