我正在尝试重命名这样的文件:
idYDDD.apl
其中: id是一个字符串id,不断担心这一点。 Y是当年的最后一位数 DDD是朱利安的日期,而不是朱利安格式的真正朱利安日期。 (1月1日+天)
我有一个批处理文件,我在这里找到了帮助我进行Julian日期转换。但我试图从年份中取出一位数。
这就是我试图抓住单个数字的方式:
set digit=%DATE:~12,1%
我一直收到错误
“数字无效。数字常数为十进制,十六进制或 八进制“。
我有一些文件,DATETOJULIAN.bat 和SendAPL.BAT
julian的日期正在转换日期,SendAPL.Bat正在重命名并在复制后通过FTP发送文件。以下是朱利安转换:
REM CONVERT DATE TO JULIAN DAY NUMBER
Echo %Date%
REM GET MONTH, DAY, YEAR VALUES
FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%1") DO SET MM=%%A& SET DD=%%B& SET YY=%%C
REM ELIMINATE LEFT ZEROS
SET /A DD=10%DD% %% 100, MM=10%MM% %% 100
REM CALCULATE JULIAN DAY NUMBER
IF %MM% LSS 3 SET /A MM+=12, YY-=1
SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*(YY+4716)/100, F=306*(MM+1)/10, JDN=C+DD+E+F-1524
以下是发送APL:
@echo off
set digit=%DATE:~12,1%
call c:\wic\DATETOJULIAN.BAT %DATE%
call c:\wic\ip.bat
copy c:\wic\download\*04.apl c:\wic\archive\%DAY%_04.apl
copy c:\wic\download\*04.apl c:\wic\download\KY%digit%%JDN%.APL
Pause
ftp -s:C:\wic\sendapl.ftp %IP%
del c:\wic\download\*04.APL
答案 0 :(得分:1)
看来你已经拿起了获得真实朱利安日数的批处理文件。正如在堆栈交换中的朱利安标记的描述中所述,朱利安日数是自公元前4714年11月24日中午以来的全天数(整数),在普通时间的公历中。您的文件DATETOJULIAN.BAT会按照您期望的格式给出日期;例如,它现在是2015年6月25日晚上7点。您输入6/25/2015作为参数,它给出JDN = 2,457,199,这是正确的。但是看起来你想要一年中的那一天,那就是176.这不是朱利安的约会,那是一个有序的约会。
解决方案是两次调用DATETOJULIAN.BAT。首先,找到您想要的年份的12月31日的JDN,并将其命名为JDNDEC31。然后找到所需日期的JDN。然后找到序数日期,JDN-JDNDEC31。
如果其他人将阅读或维护您的代码,您应该记录您没有计算真正的朱利安日数,因为您没有考虑到朱利安日数始终使用格林威治时间和朱利安日这一事实从中午开始,而不是午夜。如果你想要一个使用当地时间并且从午夜开始的类似日期号,请使用Lilian日期,该日期有一篇关于它的维基百科文章。如果您的文件时间是以格林威治时间报告的,并且您想要一个从午夜开始的日期编号,请使用修改后的朱利安日期,该日期在维基百科关于朱利安日的文章中有所描述。