在 C# 中将日期时间转换为儒略日期(ToOADate 安全吗?)

2023-12-07

我需要从标准转换公历约会到Julian天数。

我在 C# 中没有看到任何直接执行此操作的文档,但我发现许多帖子(在谷歌搜索时)建议使用ToOADate.

有关的文档ToOADate不建议将此作为儒略日期的有效转换方法。

任何人都可以澄清此函数是否能够准确地执行转换,或者可能是将 DateTime 转换为 Julian 格式字符串的更合适的方法。


This验证时为我提供了预期的数字维基百科的朱利安日页面

public static long ConvertToJulian(DateTime Date)
{
    int Month = Date.Month;
    int Day = Date.Day;
    int Year = Date.Year;

    if (Month < 3)
    {
        Month = Month + 12;
        Year = Year - 1;
    }
    long JulianDay = Day + (153 * Month - 457) / 5 + 365 * Year + (Year / 4) - (Year / 100) + (Year / 400) + 1721119;
    return JulianDay;
}

然而,这是不了解所使用的幻数的。

Thanks


参考:

  • DateTime.ToOADate 方法

OADate 与儒略日期类似,但使用不同的起点(1899 年 12 月 30 日与公元前 4713 年 1 月 1 日)和不同的“新一天”点。 Julian Dates 认为中午是新一天的开始,OADates 使用现代定义“午夜”。

1899 年 12 月 30 日午夜的儒略日期是 2415018.5。此方法应该为您提供正确的值:

public static double ToJulianDate(this DateTime date)
{
    return date.ToOADate() + 2415018.5;
}

至于算法:

  • if (Month < 3) ...:为了让神奇的数字发挥作用,他们将二月放在一年的“年底”。
  • (153 * Month - 457) / 5: Wow, that's some serious magic numbers.
    • 正常情况下每个月的天数为 31 28 31 30 31 30 31 31 30 31 30 31,但经过 if 语句调整后,变为 31 30 31 30 31 31 30 31 30 31 31 28。或者,减去30 最终得到 1 0 1 0 1 1 0 1 0 1 1 -2。他们通过在整数空间中进行除法来创建 1 和 0 的模式。
    • 重写为浮点数,那就是(int)(30.6 * Month - 91.4)。 30.6 是每月的平均天数,不包括二月(准确地说是 30.63 重复)。 91.4 几乎是 3 个非 2 月份的平均天数。 (30.6 * 3 为 91.8)。
    • So, let's remove the 30, and just focus on that 0.6 days. If we multiply it by the number of months, and then truncate to an integer, we'll get a pattern of 0s and 1s.
      • 0.6 * 0 = 0.0 -> 0
      • 0.6 * 1 = 0.6 -> 0(差值为 0)
      • 0.6 * 2 = 1.2 -> 1(相差 1)
      • 0.6 * 3 = 1.8 -> 1(差值为 0)
      • 0.6 * 4 = 2.4 -> 2(相差 1)
      • 0.6 * 5 = 3.0 -> 3(相差 1)
      • 0.6 * 6 = 3.6 -> 3(差值为 0)
      • 0.6 * 7 = 4.2 -> 4(相差 1)
      • 0.6 * 8 = 4.8 -> 4(差值为 0)
    • 看到右边的差异模式了吗?这与上面的列表中的模式相同,每个月的天数减去 30。减去 91.8 将补偿前三个月的天数,这些天数被移至一年的“年底”,并调整它将连续差值 1(上表中的 0.6 * 4 和 0.6 * 5)移动 0.4,以与 31 天的相邻月份对齐。
    • 由于二月现在是一年的“年底”,我们不需要处理它的长度。它可能有 45 天(闰年为 46 天),唯一需要改变的是一年中的天数常数 365。
    • 请注意,这依赖于 30 和 31 个月的天数模式。如果我们连续两个月都是 30 天,这是不可能的。
  • 365 * Year:每年的天数
  • (Year / 4) - (Year / 100) + (Year / 400):每 4 年加 1 个闰日,每 100 年减去 1 个闰日,每 400 年加 1 个闰日。
  • + 1721119:这是儒略历,即公元前 1 年 3 月 2 日。由于我们将日历的“开始”从 1 月移至 3 月,因此我们使用它作为偏移量,而不是 1 月 1 日。由于没有零年,所以 1 BC 得到的整数值为 0。至于为什么是 3 月 2 日而不是 3 月 1 日,我猜那是因为整个月份的计算在最后仍然有点偏差。如果原作者使用了- 462代替- 457 (- 92.4代替- 91.4在浮点数学中),那么偏移量将是 3 月 1 日。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中将日期时间转换为儒略日期(ToOADate 安全吗?) 的相关文章

  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 序列化/反序列化不同的属性名称?

    我有一个旧系统 在请求信息调用中返回 xml 其名称如下所示 邮政编码字段 名字字段 然后 同一系统有一个修改调用 它采用如下所示的 xml 邮政编码 名字 姓氏 有没有办法构建一个对象来反序列化请求 同时使用不同的名称序列化 xml 输出
  • 将 Linq-to-Sql 查询的 WHERE 子句作为参数传递

    这可能有点突破了 Linq to Sql 的界限 但考虑到到目前为止它的多功能性 我想我应该问一下 我有 3 个查询 它们选择相同的信息 仅在where子句 现在我知道我可以传递一个委托 但这只允许我过滤已经返回的结果 但我想通过参数构建查
  • $lookup 中其他连接条件的性能严重下降(使用管道)

    因此 在一些代码审查期间 我决定通过改进一个聚合来提高现有查询性能 如下所示 aggregate difference starts here lookup from sessions localField id foreignField
  • Android 10 中的 Android 开发者无 IMEI

    由于 Android 非常重视安全性 并试图让新的 Android 版本更加安全 因此开发人员很难跟上新的安全功能并找到旧方法的替代方案来使他们的应用程序与旧功能兼容 这个问题是关于新Android 10中的IMEI 旧方法通过使用以下代码
  • 创建在 Rust 中实现特征的对象向量

    用Java来说 我试图创建一个对象 严格实例 的集合 向量 每个对象都实现一个接口 特征 因此我可以迭代该集合并对所有对象调用一个方法 我已将其缩减为下面的一个示例文件 其中包含我希望能够更轻松地获得答案的所有部分 main rs try
  • 如何通过API检索Google Doc上文档的所有建议接受内容

    正如标题 我设法通过 API 检索 Google Docs 上所有建议接受的内容 我已经提到过它的指导方针 and 几个帖子但在这个平台上却是徒劳的 下面是我目前拥有的片段 请指教 function myFunction var docum
  • 使用 scipy.interpolate 进行样条表示:低振幅、快速振荡函数的插值效果较差

    我需要 以数字方式 计算我尝试使用两者的函数的一阶和二阶导数splrep and UnivariateSpline创建样条曲线以对函数进行插值以获取导数 然而 对于大小为 10 1 或更低的函数 样条表示本身似乎存在固有问题and正在 快速
  • 当使用 WinSCP 选择要上传到 FTP 服务器的文件的掩码与文件不匹配时,SSIS 任务失败

    我正在创建一个 SSIS 包 它使用脚本任务 通过 WinSCP 将文件上传到 FTP 上传工作正常 但是如果没有上传文件 我需要该过程失败 目前它只是循环并成功通过 在 WinSCP 命令文件中编写脚本方面还没有获得任何帮助 option
  • 如何在selenium中查找具有多个类的元素

    我有一个包含 3 个类的元素 我需要用 selenium 找到它
  • 文本转语音(TTS)-Android

    我是android平台的新手 现在我正在努力TTS Text to Speech 如果我在文本区域中输入文本 并且希望在单击 发言 按钮时将其转换为语音 谁能帮我吗 文本转语音功能内置于 Android 1 6 中 这是一个如何执行此操作的
  • 如何获取 TextView 的精确位置(以像素为单位)?

    我有一部 2560 x 1440 像素的智能手机 现在我正在使用这个功能TextView int locationOnScreen new int 2 txtAp GetLocationInWindow locationOnScreen 它
  • 为具有圆角的 UIImageView 创建阴影?

    我正在尝试创建一个ImageView它有圆角和阴影以赋予它一些深度 我能够为UIImageView 但是每当我添加代码以使其具有圆角时 它只有圆角而没有阴影 我有一个IBOutlet named myImage 并且它位于viewDidLo
  • pandas 中的单列

    有没有办法在不影响数据框其余部分的情况下对 pandas 中的单个列进行舍入 gt gt gt print df item value1 value2 0 a 1 12 1 3 1 a 1 50 2 5 2 a 0 10 0 0 3 b 3
  • 在哪里以及如何定义应用程序属性? - JHIpster

    在 Spring Boot 中 可以在 application properties 文件中定义应用程序属性 例如 Rest 的前缀可以定义为 spring data rest basePath api 对于基于 Spring Boot 的
  • 游标如何引用已删除的行?

    当我从 Android 中的 sqlite 数据库查询返回游标时 它似乎包含固定数量的行 无论数据库发生什么情况 这些行都不会改变 例如 如果在光标打开时删除了某些行 我仍然可以引用已删除的行 这很好 但是它是如何工作的呢 一种猜测可能是
  • 哪些 Boost 功能与 C++11 重叠?

    几年前 我把我的 C 技能束之高阁 现在看来 当我再次需要它们时 情况已经发生了变化 我们现在有了 C 11 我的理解是它重叠了许多 Boost 功能 是否有一些总结 这些重叠在哪里 哪些 Boost 库将成为遗产 建议使用哪些 C 11
  • 将 xml 列中的数据插入到临时表中

    我有一个 xml 列 看起来像 SET XMLData
  • ggplot 在 X 轴下方添加跟踪颜色

    我想在 x 轴下方添加一条线 其颜色取决于未绘制的因素 在此示例中 我正在创建一个箱形图 并希望添加一条指示另一个变量的线 以汽车数据集为例 然后实际思考我正在尝试做的事情 ggplot mtcars aes factor cyl mpg
  • 为什么 angular2 多次执行方法?

    我的应用程序结构如下所示 ts export class TodoListComponent get sortedTodos ITodo console log this counter html div class todo item d
  • 在 C# 中将日期时间转换为儒略日期(ToOADate 安全吗?)

    我需要从标准转换公历约会到Julian天数 我在 C 中没有看到任何直接执行此操作的文档 但我发现许多帖子 在谷歌搜索时 建议使用ToOADate 有关的文档ToOADate不建议将此作为儒略日期的有效转换方法 任何人都可以澄清此函数是否能