求公历和农历的PERL转换程序

AllCHN 2003-08-04 10:57:41
感觉这是个非常困难的问题,要各位大虾费心总觉得有点过分,不过,也许我们可以因此交流一些PERL方面的心得、程序,也算有所收获!

要求:
(1)计算公历某日期的农历日期;
(2)得到农历某年的月份列表(闰月用负数表示, 如-7表示闰七月);
(3)计算农历某年某月的天数。
(4)计算农历某年的干支、属相。
...全文
917 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ykj76 2003-08-29
  • 打赏
  • 举报
回复
其实转换本身不是很难,主要是需要一个很大的数据来对应.也就是dwCalendarData[].
上面的只提供了20年的
leebx 2003-08-29
  • 打赏
  • 举报
回复
给你一段javascript代码参考怎么样,如果要的话留个email
AllCHN 2003-08-26
  • 打赏
  • 举报
回复
up
subscribe 2003-08-08
  • 打赏
  • 举报
回复
up
lvjack 2003-08-05
  • 打赏
  • 举报
回复
给你一段代码参考:

/*************************************************
计算阴历日期
范围从2000/02/05开始的20年
代码实现:耙子 2001/08/17
最后修订: 2001/08/18
**************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

typedef unsigned int DWORD;

/**************************************************
sLunar: 返回阴历日期字符串
dwDays: 所求日期距离 2000/02/05的天数差
**************************************************/
void Lunar2Solar(char *sLunar, const DWORD dwDays)
{
const char sTG[][3]= {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
const char sDZ[][3]= {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
const char sSX[][3]= {"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
const char sMon[][3]= {"正","二","三","四","五","六","七","八","九","十","冬","腊"};
const char sDate[][5]= {
"初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"
};

// Start from 2000/2/5, 20 Lunar years' Data
const DWORD dwLunarYears= 20;
const DWORD dwCalendarData[]=
{
0xc96, // 0000 0000 1100 1001 0110
0x41a95, // 0100 0001 1010 1001 0101
0xd4a, // 0000 0000 0100 1101 1010
0xda5,
0x20b55,
0x56a,
0x7155b,
0x25d,
0x92d,
0x5192b,
0xa95,
0xb4a,
0x416aa,
0xad5,
0x90ab5,
0x4ba,
0xa5b,
0x60a57,
0x52b,
0xa93,
0x40e59
};

DWORD i, j;
DWORD yy=0, mm=0;
DWORD t, r, m, p=0, q;
for (i=0; i< dwLunarYears; i++)
{
t= dwCalendarData[i];
r= (t >> 16) & 0x0f;
m= (r==0)?12:13;
for (j=0; j<m; j++)
{
q= ((t >> (m-j-1)) & 1)==0 ? 29 : 30;
if (p+q > dwDays)
break;
p+= q;
}
if (j < m)
break;
}
// Date Overflow
if (i == dwLunarYears)
{
sprintf(sLunar, "%s", "I don't know so much!");
return;
}
sprintf(
sLunar,
"%s%s年(%s) %s%s月%s",
sTG[(i+6)%10], // Heavenly stemas
sDZ[(i+4)%12], // Earthly Branches
sSX[(i+4)%12], // Shu xing
(((r!=0) && (j == r)) ? "闰" : ""), // Leap month
sMon[((r!=0) && (j > r-1)) ? j-1 : j],
sDate[dwDays-p]
);
return;
}

int main ()
{
time_t t1, t2;
struct tm tt;
DWORD dwDiffTime;
char sLunar[32];
tt.tm_year= 2000-1900;
tt.tm_mon=1;
tt.tm_mday=5;
tt.tm_hour=0;
tt.tm_min=0;
tt.tm_sec=0;
t1= mktime(&tt);
for (int i=0; i< 365; i++ ) {
tt.tm_year= 2030-1900;
tt.tm_mon=0;
tt.tm_mday=i;
tt.tm_hour=0;
tt.tm_min=0;
tt.tm_sec=0;
t2= mktime(&tt);

printf("%s", ctime(&t2));
dwDiffTime= difftime(t2,t1) / (60*60*24);
printf("起第 %d 天 ", dwDiffTime);
Lunar2Solar(sLunar, dwDiffTime);
puts(sLunar);
}
getch();
return 0;
}
内容概要:本文针对光储充一体化社区中电动汽车的有序充电问题,提出并实现了一种双层优化策略,旨在协调系统经济性与用户充电体验。该策略构建主从博弈模型,上层以电网侧经济运行目标优化动态充电定价,下层以用户侧满意度最大化为目标优化个体充电行为,通过Matlab代码进行建模与仿真验证。研究综合考虑光伏发电的不确定性、储能系统的充放电特性以及电动汽车充电需的时空分布特征,建立了完整的数学优化模型,并设计相应的解算法,有效实现了削峰填谷、降低用户成本、提高可再生能源就地消纳率等多重目标,为新型配电系统的协同优化提供了可行方案。; 适合人群:具备一定电力系统基础知识、优化理论背景及Matlab编程能力的研究生、科研人员,以及从事新能源接入、智能电网、电动汽车调度等相关领域的工程技术人员。; 使用场景及目标:①深入理解光储充一体化系统中多主体互动机制与有序充电调度原理;②掌握双层优化模型(特别是主从博弈)的构建思路与解方法;③学习如何利用Matlab实现复杂能源系统的仿真建模与数据分析,服务于科研论文撰写、课题研究或实际工程项目开发。; 阅读建议:此资源强调理论建模与代码实践的紧密结合,建议读者在阅读过程中对照文档中的模型推导步骤,逐行分析Matlab代码实现逻辑,动手复现仿真结果,深入理解变量设置、约束条件处理及算法迭代过程,从而提升独立解决综合能源系统优化问题的能力。

2,203

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧