如何在脚本加载器中将四位 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, 等等)

上下文

我试过的

我一直在简单地在提供的四位数字的第一位数字前添加“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.

不符

鉴于上述情况,您可以将每个日历年的开始声明为参考日期。 :)