2017-06-24 58 views
0

是否有任何函數直接將Unix時間戳(由time()[ctime庫]返回)轉換爲struct tm或其他格式爲Jalali格式的日期和時間?Jalali日曆

而且我不想找一種方法將格里高利轉換爲賈拉利。我正在尋找一種算法來將什麼時間(NULL)直接返回到Jalali日曆。

+0

投票重新打開爲原來的問題(這被標記爲重複)沒有回答這個問題。 –

+0

我很想看到一個非迭代的答案,如公曆日曆(http://howardhinnant.github.io/date_algorithms.html#civil_from_days)。這隻能從天數轉換而來,但是從秒數轉換爲天數是微不足道的。有了一個好的算法,這樣一個日曆可以很容易地添加到這個日期/時間/時區庫中,該庫設計爲有許多日曆互操作:https://github.com/HowardHinnant/date –

回答

1

我開發了一個類似的算法來將Julian Day Number轉換爲Solar Hijri(〜= Jalali)日曆日期。原則是一樣的:以時間爲參考點(在你的情況下,1970-01-01等於JDN#2440587),並計算自那時起有多少年,幾個月和幾天。我的算法基於Akramis的平均年計算,與伊朗官方日曆很相符(與過去相同)。

C實現可以在這裏找到:

https://github.com/soroush/libcalendars/blob/dev/src/cl-solar-hijri.c

請注意,您只能通過增加2440587偏移UNIX時間轉換爲JDN。所以你需要:

int16_t year; 
uint8_t month; 
int16_t day; 
jdn_to_sh(unix_time + 2440587, &year, &month, &date);