如何从回历日期转换为公历日期,反之亦然

2023-11-30

我正在寻找一种方法来计算例如从现在到特定日期有多少天,并且我可以用它来确定我是否处于特定时间段(例如 Muharram +- 5 天)

我已经找了 10 多个小时了,我发现的最好的东西是“HijrahDate”库“java.time.chrono.HijrahDate”和一个叫做“Joda Date”的东西,我在使用它时遇到了困难。


您想使用哪种回历版本?

如果您选择沙特阿拉伯的官方日历,那么解决方案基于java.time.HijrahDate会工作。但此类在 Android 上至少需要 API 级别 26。例子:

HijrahDate hd1 = HijrahDate.now();
HijrahDate hd2 = HijrahDate.from(LocalDate.of(2020, 5, 1));
long days = ChronoUnit.DAYS.between(hd1, hd2);

还有一些比较方法,例如isAfter() or isBefore()从接口继承ChronoLocalDate和标准 plus() 方法,以确定您的日期是否在特定时间段内。

向后移植java.time:

还有一个名为三十ABP适用于较低的 Android 版本。但要注意其实施的陷阱HijrahDate不同,并且不使用沙特阿拉伯的日历(因此您必须容忍日期转换的差异)。

关于乔达时间:

如果您选择该(相当过时的)库,那么您应该选择该库版本适合安卓。然而,它也不支持沙特阿拉伯的日历,但提供了四种不同的其他变体。您需要指定算法闰年模式.

ICU4J(嵌入Android):

其类别伊斯兰历提供类似于旧日历类的样式java.util.Calendar还有几个变体,包括沙特阿拉伯的变体。所需的最低 API 级别为 24。

Time4A:

那是我自己写的一个库(如Android 版 Time4J 的适配)。它提供了类回历有多种变体,包括 Joda 变体,但也包括沙特阿拉伯日历(变体 ummalqura)。它提供了所有需要的功能,例如日期算术(通过 plus() 或 minus() 方法)、日期比较(通过 isAfter() 等)。例子:

String variant = HijriCalendar.VARIANT_UMALQURA;
StartOfDay startOfDay = StartOfDay.definedBy(SolarTime.ofMecca().sunset());
HijriCalendar today = HijriCalendar.nowInSystemTime(variant, startOfDay);
HijriCalendar hcal = // gregorian to Hijri conversion
    PlainDate.of(2020, 5, 1).transform(HijriCalendar.class, variant);
long days = CalendarDays.between(today, hcal).getAmount();

其他库不支持诸如日落作为一天的开始之类的功能。 Muharram +- 5days 请求的示例可能如下所示:

CalendarDays tolerance = CalendarDays.of(5);
HijriCalendar htemp = today.with(HijriCalendar.MONTH_OF_YEAR, HijriMonth.MUHARRAM);
HijriCalendar h1 = htemp.with(HijriCalendar.DAY_OF_MONTH.minimized()).minus(tolerance);
HijriCalendar h2 = htemp.with(HijriCalendar.DAY_OF_MONTH.maximized()).plus(tolerance);
boolean inTimePeriod = !(today.isBefore(h1) || today.isAfter(h2));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从回历日期转换为公历日期,反之亦然 的相关文章

随机推荐

  • 我的应用程序中的 Nougat OS 中显示的 Webview 空白页面

    我在我的应用程序中调用了 CCAvenue 支付网关集成 直到它正常工作 但是当我将设备操作系统 Marshmallow 更新到 Nougat 时 Webview 页面显示空白屏幕 logcat 中也没有找到错误日志 我还在所有其他低于 N
  • 从 XSD 生成类

    您正在 SOA 世界中进行 Web 服务的契约优先开发 编辑 XSD 文件后 从 XSD 文件自动 重新 生成 net 类的最佳方法是什么 xsd exe 将为您生成新的类 根据 Visual Studio 的设置方式 将 xsd exe
  • 启用/禁用代理应用程序在 IE 中无法正常工作

    我在这里遇到了一个非常奇怪的情况 我编写了一个应用程序 除其他外 它可以将连接的代理从打开切换到关闭 反之亦然 这是通过更改注册表中的值来完成的 public void SetUpProxy string proxy bool enable
  • 通过javascript检测ipad/iphone webview

    有没有办法用 JavaScript 检测网站是否在 iPad 的 Safari 内或应用程序 WebView 内运行 这使用了以下组合window navigator userAgent and window navigator stand
  • 数字签名 亚马逊应用商店

    我在亚马逊应用商店中读到了这样的内容 这是什么意思 我是否必须明确地做某事 或者亚马逊自己签名 我不清楚 你能告诉我吗 我可以为我的应用程序应用签名吗 所有应用程序都必须使用证书进行数字签名 应用于您的应用程序的默认签名是亚马逊提供的证书
  • 在 Web 配置中添加 serverRuntime 标记会导致 500.19 错误

    我刚刚从另一台笔记本电脑上的 TFS 下载了 asp net 项目 但无法运行它 我已经缩小了问题范围 这与我的 webconfig 设置有关 设置是
  • 如何以不区分大小写的方式从列表中删除单词?

    我有一个名为words包含可能为大写或小写或它们的某种组合的单词 然后我有另一个列表称为stopwords其中仅包含小写单词 现在我想浏览一下其中的每个单词stopwords并从中删除该单词的所有实例words以不区分大小写的方式 但我不知
  • PHP 日期“最后一个工作日”输出错误的月份

    我正在尝试获取last weekday使用下面的代码显示当前月份的数据 我期望它的行为就像所有其他运算符一样last friday of并输出本月最后一个工作日 而是输出上个月的最后一个工作日 我知道我可以通过使用来纠正这个问题modify
  • 使用线程执行shell命令c++

    是否可以通过创建线程来执行 shell 命令 即不使用 popen system 或任何 fork exec 变体 为什么或者为什么不 为了提供更多上下文 我正在运行一个多线程程序 其中一个线程需要执行 shell 脚本 目前它使用 pop
  • CDataColumn 的“值”内的条件语句

    有谁知道如何在 CGridView 列字段中显示条件值 我在数据库中有一个性别 M 或 F 的条目 在 CGridView 中 但是我想分别显示 男 和 女 而不是 M 或 F 欢迎任何想法 我发现虽然不允许使用完整的 if else 语法
  • 在 MVC3 中将 ListBox 与模型绑定

    我的模型是 public class SiteConfig public SiteConfig public int IdSiteConfig get set public string Name get set public byte S
  • 在审核表单中添加自定义字段

    我期待在审核表单中创建自定义字段 电子邮件 ID 和一个下拉列表 我已经尝试过这个 但没有保存数据 仅保存字段 应用程序 代码 核心 法师 评论 模型 Mysql4 Review php protected function afterSa
  • 如何使用与用户定义函数同名的 MATLAB 工具箱函数

    我遇到了问题findpeaks函数 该函数位于信号处理工具箱中 并且该程序还有它的另一个版本 用户定义函数 我需要调用信号处理工具箱中的 on 而不是用户定义的函数 而且由于多种原因我无法重命名用户定义的函数 谁能帮我调用工具箱函数 MAT
  • 解析正数和负数的字符串,Javascript

    所以我正在研究 d3 中制作的标签云示例 http www jasondavies com wordcloud http 3A 2F 2Fsearch twitter com 2Fsearch json 3Frpp 3D100 26q 3D
  • 使用 jQuery 动态创建链接

    我正在尝试使用 jQuery 在 blockquote 元素中创建一个链接 我现在正处于这个阶段 var pullQuote span pull quote each function var this this hrefLink http
  • 如何找到 Redshift 中访问次数最多的表?

    我们正在将实时数据传输到 Redshift 瓶颈是没有可以并发运行的表加载 目前 我们每 15 分钟运行超过 1000 个负载 但我们希望根据用户使用这些表的频率来减少这个数字 请建议我们如何在 Redshift 中获取此信息 This v
  • 获取奇数长度回文

    我试图找到最长的奇数长度回文 但我编写的代码没有给我完整的回文 只是其中的一部分 任何帮助都会很棒 def get odd palindrome at s index str int gt str gt get odd palindrome
  • 使用 firestore 安全规则中的替换功能

    我正在努力应对 Firestore 安全规则 我想检查需要替换功能的值 即电子邮件地址 我可以在一般安全文档中找到一些文档 但这似乎不适用于 Firestore 例如这有效 allow write if resource data memb
  • 如何获取/跟踪 ASP.NET 传出响应文本

    我的服务器似乎有时会向网络客户端返回错误的 html 我在 VS 2012 中使用 asp net 4 在 IIS Express 上进行调试 为了调试这个问题 我想跟踪asp net发送的html in the Global asax P
  • 如何从回历日期转换为公历日期,反之亦然

    我正在寻找一种方法来计算例如从现在到特定日期有多少天 并且我可以用它来确定我是否处于特定时间段 例如 Muharram 5 天 我已经找了 10 多个小时了 我发现的最好的东西是 HijrahDate 库 java time chrono