【问题标题】:batch script that converts date to julian date将日期转换为朱利安日期的批处理脚本
【发布时间】:2016-01-13 20:15:07
【问题描述】:

我正在创建一个批处理文件以将 %date% 转换为朱利安日期,但我似乎找不到有关执行此操作的明确信息。谁能告诉我如何将 %date% 转换为朱利安日期?或任何已经存在的批处理文件?

谢谢

【问题讨论】:

  • 我很确定网上有一个批处理文件可以将日期转换为您想要的任何格式。
  • 如果您将鼠标悬停在 julian-date 标记上,它会显示:术语“Julian 日期”也指年份数字(更准确地说,是 序数日期 ) 在公历中,尤其是在计算机编程、军事和食品工业中。

标签: batch-file julian-date


【解决方案1】:

编辑:修改原始代码,仅以“Dow MM/DD/YYYY”格式显示当前日期的儒略日数:

@echo off
for /F "tokens=2-4 delims=/ " %%a in ("%date%") do (
   set /A "a=(%%a-14)/12, JDN=(1461*(%%c+4800+a))/4+(367*(%%a-2-12*a))/12-(3*((%%c+4900+a)/100))/4+%%b-32075"
)
echo %JDN%

参考:http://www.hermetic.ch/cal_stud/jdn.htm#comp

第二。编辑

要获得序数天数,根据一年中的天数(从1到366),使用这个方法:

@echo off
setlocal

for /F "tokens=2-4 delims=/ " %%a in ("%date%") do (
   set /A "MM=1%%a-100, DD=1%%b-100, Ymod4=%%c%%4"
)
for /F "tokens=%MM%" %%m in ("0 31 59 90 120 151 181 212 243 273 304 334") do set /A Day=DD+%%m
if %Ymod4% equ 0 if %MM% gtr 2 set /A Day+=1

echo %Day%

【讨论】:

  • 当我运行该批处理时,它返回一个缺少操作数的错误。
  • 当然!这不是一个工作批处理文件,而只是两个执行转换过程的子例程。如果您想要一个完整的批处理文件,那么您首先向我们展示您要转换的%date% 的格式是什么:MM/DD/YYYY、DD/MM/YYYY,还有其他吗?日期是当前日期吗?它是作为参数给出的吗?等等……
  • 命令提示符中的 %date% 格式示例:>echo %date% >Wed 01/13/2016
  • 它返回 2457401 我认为它不正确,我相信它应该返回 013,即今天的朱利安日期。
  • @Hereok 你把朱利安日期和序数日期混淆了。
【解决方案2】:

this 这是一个 julian.bat:

@if (@X)==(@Y) @end /* JScript comment
    @echo off

    cscript //E:JScript //nologo "%~f0" 

    exit /b %errorlevel%

@if (@X)==(@Y) @end JScript comment */


Date.prototype.getJulian = function() {
    return Math.floor((this / 86400000) - (this.getTimezoneOffset()/1440) + 2440587.5);
}

var today = new Date(); //set any date
var julian = today.getJulian(); //get Julian counterpart
WScript.Echo(julian);

它可以像这样使用:

for /f %%a in ('call julian.bat') do @set "julian=%%a"

【讨论】:

  • 您好,我试过那个脚本,结果是 2457401 我认为不正确。它应该返回 013,即今天的朱利安日期。有没有想过为什么它会返回 2457401?
  • @Hereok 我已经尝试过thisthis 等等,结果与脚本中的这些一致
【解决方案3】:

@Aacini - 你的答案非常有效......除非月份或日期是 08 或 09 - 然后批次会混淆并认为这是对非法八进制的尝试。我看不到如何将其保留在一行,但这是一个解决方案(经过测试,并结合了@jeb 评论):

:get_julian
    for /F "tokens=1-3 delims=/" %%a in ("%1") do (
        set /a mon=100%%a %% 100
        set /a day=100%%b %% 100
        set year=%%c
    )
    set /a x=(mon-14)/12
    set /a JD=(1461*(year+4800+x))/4+(367*(mon-2-12*x))/12-(3*((year+4900+x)/100))/4+day-32075
    exit /b

【讨论】:

  • 你可以使用set /a "mon=(100%mon%) %% 100"
  • “@”标签在邮件正文中是否有效,还是我需要将@Aacini 放在这里让他看到?
  • 两种方式都不是,但你可以在他的回答下添加评论
  • @jeb - 不,我不能。我已经试过了。还没有 50 个代表,所以我不能评论不是我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多