将Juliandate(5或4个字符)转换为公历,反之亦然

我试图创build一个VBA脚本或公式/函数将Juliandate(5001或15001)转换为正常date(01/01/2015)。 我能够find以下公式将5个字符Juliandate转换为公历date,它工作正常。 我不是math家,所以我不知道如何写4字符JD的公式,我不知道从哪里开始反向(Regular Date to JD)。 任何帮助这个问题将不胜感激。

5个字符JD的公式在这里:

Assuming that the Julian Date is in A1: =DATE(IF(0+(LEFT(A1,2))<30,2000,1900)+LEFT(A1,2),1,RIGHT(A1,3)) 

在此先感谢您的帮助。

您需要testing目标单元格的长度以确定它是否为4或5个字符(清晰的换行符):

 =DATE(IF(0+(VALUE(IF(LEN(A1)=5,LEFT(A1,2),LEFT(A1,1))))<30,2000,1900) +VALUE(IF(LEN(A1)=5,LEFT(A1,2),LEFT(A1,1))),1,RIGHT(A1,3)) 

反之则更容易 – 只需要从date部分中构build一个数字,然后将结果string转换为一个数字来摆脱任何前导零:

 =VALUE(RIGHT(YEAR(A1),2)&TEXT(A1-DATE(YEAR(A1),1,0),"000")) 

编辑:每个注释,如果一个4年儒略date的第一个数字小于或等于当前年份的最后一个数字,下面的方法将使用本十年,否则使用200x:

 =DATE(IF(0+(VALUE(IF(LEN(A1)=5,LEFT(A1,2),LEFT(A1,1))))<30, IF(LEN(A1)=5,2000,IF(LEFT(A1,1)<=RIGHT(YEAR(NOW()),1),2010, 2000)),1900) +VALUE(IF(LEN(A1)=5,LEFT(A1,2),LEFT(A1,1))),1,RIGHT(A1,3)) 

几乎忘了…如果你需要2019年后的公式保持有效,你可以用2000+(MID(YEAR(NOW()),3,1)*10)代替2010年。

你可以从这个页面使用这个公式:

 =DATE(IF(0+(LEFT(JULIAN_DATE_CELL,2))<30,2000,1900)+LEFT(JULIAN_DATE_CELL,2),1,RIGHT(JULIAN_DATE_CELL,3)) 

您需要用您存储Juliandate的单元格号replaceJULIAN_DATE_CELL。

你需要适应2000年以前的date吗? 如果没有,那么你可以使用这个公式:

=DATE(IF(LEN(A1)=5,LEFT(A1,2)+100,LOOKUP(YEAR(NOW()),FLOOR(YEAR(NOW()),10)+LEFT(A1)-{10,0})),1,RIGHT(A1,3))

这使用LOOKUP函数来查找当前年份与可能的选项,例如目前如果你有A1中的6001查找2015年像{2006,2016}的数组,并select较低的值。 如果你明年做同样的计算, 2016将被选中。

这个公式将会对未来起作用,例如在2020年将把9001解释为2019年1月1日。

为了扭转计算,你总是需要一个4位数的JD,2010或2020年呢?