hijri(伊斯兰)日历问题!

2024-01-06

我会将公历日期转换为回历(伊斯兰)日期。经过网上搜索,找到了转换的源代码。 我将代码从 Java 和 PHP 转换为 C 语言。

该工具有时工作时没有任何问题。但有些日子有问题。

我需要您的帮助,要么修复该工具,要么提供可以正常工作的可用代码! 顺便说一句,我找到了另一个源代码(http://emr.cs.iit.edu/~reingold/calendar.C) http://emr.cs.iit.edu/~reingold/calendar.C那是C++基础。因为我不知道 C++ 是否有人可以将其转换为 C Base 或 Objective C 将是完美的(仍然不确定此代码是否可以正常工作)。

附:您可以在以下位置检查正确的日期:islamicfinder.org/Hcal/index.php

void gregorian_to_hijri(int* h_y, int* h_m, int* h_d, int  g_y, int  g_m, int  g_d)
{
    int year, month, day;

    int zyr;
    int zd;
    int zm;
    int zy;

    float zjd;
    int zl;
    int zn;
    int zj;

    year = g_y;
    month = g_m;
    day = g_d;


    zyr = year;
    zd = day;
    zm = month;
    zy = zyr;

    if((zy > 1582) || ((zy == 1582) && (zm > 10)) || ((zy == 1582) && (zm == 10) && (zd > 14)))
    {
        zjd = ((1461 * (zy + 4800 + ((zm - 14) / 12))) / 4)
            + ((367 * (zm - 2 - 12 * (((zm - 14) / 12)))) / 12)
            - ((3 * (((zy + 4900 + ((zm - 14) / 12)) / 100))) / 4) + zd - 32075;
    }
    else
    {
        zjd = 367 * zy - ((7 * (zy + 5001 + ((zm - 9) / 7))) / 4)
            + ((275 * zm) / 9) + zd + 1729777;
    }

    zl = zjd - 1948440 + 10632;
    zn = ((zl - 1) / 10631);
    zl = zl - 10631 * zn + 354;
    zj = (((10985 - zl) / 5316)) * ((int)((50 * zl) / 17719))
        + ((zl / 5670)) * ((int)((43 * zl) / 15238));

    zl = zl - (((30 - zj) / 15)) * (((17719 * zj) / 50))
        - ((zj / 16)) * (((15238 * zj) / 43)) + 29;

    zm = ((24 * zl) / 709);
    zd = zl - ((709 * zm) / 24);
    zy = 30 * zn + zj - 30;

    *h_y = zy;
    *h_m = zm;
    *h_d = zd;
}

假设这是针对 Mac (Cocoa) 或 iOS (Cocoa Touch) 应用程序,因为这是您最常看到 Objective C 的地方,那么您可以执行以下操作:

// Create a Gregorian Calendar
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

// Set up components of a Gregorian date
NSDateComponents *gregorianComponents = [[NSDateComponents alloc] init];

gregorianComponents.day = 4;
gregorianComponents.month = 12;
gregorianComponents.year = 2010;

// Create the date
NSDate *date = [gregorianCalendar dateFromComponents:gregorianComponents];

[gregorianComponents release];
[gregorianCalendar release];


// Then create an Islamic calendar
NSCalendar *hijriCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCivilCalendar];

// And grab those date components for the same date
NSDateComponents *hijriComponents = [hijriCalendar components:(NSDayCalendarUnit | 
                                                               NSMonthCalendarUnit |
                                                               NSYearCalendarUnit)
                                                     fromDate:date];


NSLog(@"[In Hijri calendar ->] Day: %ld, Month: %ld, Year:%ld", 
          [hijriComponents day],
          [hijriComponents month],
          [hijriComponents year]);

[hijriCalendar release];

如果您想要的只是当前日期,那么您可以完全跳过设置公历日期,只需执行以下操作:

// Create an Islamic calendar
NSCalendar *hijriCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCalendar];

// And grab the date components for the current date
NSDateComponents *hijriComponents = [hijriCalendar components:(NSDayCalendarUnit | 
                                                               NSMonthCalendarUnit |
                                                               NSYearCalendarUnit)
                                                     fromDate:[NSDate date]];

[hijriCalendar release];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hijri(伊斯兰)日历问题! 的相关文章

  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 为每行 NSTableView 文本着色

    我有一个 NSTableView 它显示我拥有的对象数组 对于每个对象 行 我想根据在每个对象上运行的函数的结果来更改显示的文本的颜色 因此 例如表中存在于另一个列表 或其他一些要求 中的所有对象 我想以绿色文本显示它们 不存在的对象以红色
  • 断点条件错误

    我已经根据条件设置了断点 event name isEqualToString Some Name 这很好用 但是 当我尝试添加另一个带有条件的断点时 part name isEqualToString Some Value With A
  • 由于 2.23 导致 iOS 应用程序被拒绝 - iOS 数据存储指南

    以下是 Apple 关于拒绝的消息 2 23 应用程序必须遵循 iOS 数据存储指南 否则将被拒绝 2 23 详情 在启动和内容下载时 您的应用程序会存储 6 5 MB 这并不意味着 遵守 iOS 数据存储指南 下一步 请验证只有用户使用您
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • Objective C (iphone) 关于发布的问题

    如果我创建一个视图 并将其添加为子视图并将其添加到数组中 是否必须释放它两次 UIView cat UIView alloc initWithFrame someFrame self view addSubview cat self ani
  • AVPlayer 不播放音频 - iOS 9,目标 - C

    我正在尝试从我的应用程序中的 URL 播放音频 iOS 8 中一切都按预期发生 模拟器和物理设备 对于 iOS 9 它可以在模拟器中运行 但在设备上 音频根本无法播放 出现流媒体 如果我单击播放 进度条还显示音频正在加载并播放 但没有声音
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行

随机推荐

  • 如何在Spring JUnit测试中WEB-INF/spring/webmvc-config.xml配置正确

    我有一个基于 Maven 的 Spring 3 0 项目 Web 应用程序的 Spring 配置文件位于
  • LTE堆栈协议开发

    在阅读一篇有关 LTE 的文章时 我遇到了一个术语 LTE 堆栈协议开发 遗憾的是 没有关于这个术语的进一步解释 当我在谷歌上查找时 它发现了 LTE 协议开发的所有职位空缺 所以问题是 LTE 堆栈协议开发 到底是什么 如果可能的话 我想
  • 欧拉计划 3 - 为什么这个方法有效?

    13195 的质因数是 5 7 13 和 29 数字 600851475143 的最大质因数是多少 我用自己的方式在Project Euler上解决了这个问题 速度很慢 然后我在某人的github帐户上找到了这个解决方案 我不明白为什么它有
  • 所有级别的日志中每个用户/会话都有唯一的 ID? Log4J?

    我们正在进行一些性能测试 以确定应用程序的哪些步骤需要多少时间 当然 使用正则表达式轻松解析 过滤日志是一个魅力 针对问题 我们的jsf应用程序被分成几个项目 这些项目被其他 非jsf 应用程序使用 我的第一个方法是 if logger i
  • VBA 中 Range() 的 .Value 属性

    我见过的一些 Excel VBA 代码没有使用 Range 对象上的 Value 属性 例如 myX Range A1 而不是 myX Range A1 Value 这仅仅是因为范围对象的默认行为是返回单元格中的值吗 是否有一个时候我会no
  • UITableView 普通样式部分标题在搜索视图上重绘

    当 tableView 位于搜索栏显示控制器的后台时 有人成功地重新加载了 tableView 吗 看照片看看发生了什么 我有一个带有搜索显示控制器的 UITableViewController 当我在显示搜索显示控制器的表视图时对 UIT
  • LINQ 中的日期范围重叠问题

    表中给定特定记录的日期范围 例如特定字段 名称 如果有人试图在之前的日期范围内插入该名称 则不应允许这样做 我在这里尝试过一些代码看看这个 if dataContext TableAs Where x gt x EndDate gt Sta
  • Perl 版本特定语法资源

    网络上是否有资源可供我查找 perl 版本 5 8 1 与 current stable 特定语言语法 而无需转到 perldoc 并在版本之间切换 然后搜索我正在寻找的语言项目看看它是否存在于所选版本中 这似乎是一种蹩脚的方式 我想我应该
  • 数据绑定中的双重间接。在模板中插入字符串

    我正在尝试解决指令链接函数中的双重绑定 scope a surprise scope b a 模板是 div b div 它呈现为 div a div 是否可以让视图显示 div surprise div 我一直在尝试重新编译该指令 但是有
  • Python 中通过 USB 转换器进行串行通信 - 如何解决这个问题?

    python 程序需要每秒从串行端口接受一个字符串 我计划使用 RS 232 转 USB 转换器 该应用程序将在 Ubuntu 10 04 下运行 我该如何处理这个问题 我用吗pySerial http pyserial sourcefor
  • @ 字符未显示在 Watson Conversation Service 响应字符串中

    在使用 IBM Watson Conversation Service WCS 时 我想在响应中打印电子邮件地址 问题在于 WCS 忽略了 符号之后的所有字符以及 字符本身 我尝试使用 and 逃避它 但并没有多大帮助 如何在响应字符串中打
  • 测试驱动开发适合初学者吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 以编程方式更改列表框项目背景颜色

    我很难理解 XAML 如何与 C 结合使用 我的问题是 我有两个不同的List
  • Grails 2.1.0 应用程序 tomcat 7.0.22 重定向后会话为空

    我刚刚学习 grails 并且遇到了一个应用程序问题 该应用程序在 Netbeans 中运行时工作正常 但在部署到 Centos 5 4 服务器上的 Tomcat 7 0 22 时却显示出奇怪的行为 我正在使用 proxy ajp 使该应用
  • Ziparchive 无法仅在 PHP 中打开 zip 文件

    我正在尝试使用 PHP 解压缩文件压缩存档 http php net manual en class ziparchive php类但是当我尝试时 file path to zip file zip zip new ZipArchive r
  • React/ ESLint - JSX props 不应使用箭头函数

    我目前正在 React 中创建一个组件 并且正在使用 ES Lint 规则react jsx no bind 我的问题是我希望能够将参数传递给我的组件函数 这是我想用来执行此操作的代码 class LanguageDropdown exte
  • 如何用plotly绘制椭球体

    有什么方法可以用plotly 3D 绘制类似椭球体的表面吗 目前只有表格的表面z f x y 在文档中进行了讨论 还有Mesh 3D https plot ly python reference mesh3d 但我没有找到相关的例子 似乎可
  • 从 Android 联系人中获取单个电话号码

    您好 我正在尝试从联系人列表中获取一个电话号码 我找到了可以获取整个联系人列表电话号码的代码 我想要的只是所单击项目的电话号码 任何帮助将不胜感激 谢谢 public void onClick View v Intent contactPi
  • 如何使用 IntelliJ IDEA 应用“移动方法”重构?

    我希望能够在 IntelliJ IDEA 中将实例方法从一个类移动到另一个类 Fowler 的 重构 中的 移动方法 不幸的是 当我尝试 移动 cmd F6 时 它告诉我 没有具有引用类型的方法 您想让方法静态然后移动吗 我不想使我的方法成
  • hijri(伊斯兰)日历问题!

    我会将公历日期转换为回历 伊斯兰 日期 经过网上搜索 找到了转换的源代码 我将代码从 Java 和 PHP 转换为 C 语言 该工具有时工作时没有任何问题 但有些日子有问题 我需要您的帮助 要么修复该工具 要么提供可以正常工作的可用代码 顺