gpt4 book ai didi

c++ - 回历(伊斯兰)日历问题!

转载 作者:太空狗 更新时间:2023-10-29 23:34:21 28 4
gpt4 key购买 nike

我会将公历日期转换为回历(伊斯兰)日期。可能在网上搜索后,我找到了一个源代码来转换它。我将代码从 Java 和 PHP 转换为 C base。

该工具有时可以毫无问题地工作。但是有些日子有问题。

我需要您的帮助,要么修复工具,要么提供可以毫无问题地运行的可用代码!顺便说一句,我找到了另一个源代码(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];

关于c++ - 回历(伊斯兰)日历问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354337/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com