在工作过程中,刚好需要获取农历和节气的相关信息,找了下资料,大概可以通过一些网站api获取,或者有成熟的js来计算,再调用计算结果,考虑软件实际使用场景,并经过“游戏”同学的完善提升,代码参考如下。
代码说明:1)原考虑时间信息直接通过time库time(time.now(),"%H:%M:%S")来输出,但发现在软件运行过程中,如果调用chrome浏览器等比较占内存的操作,会导致整个界面卡住,影响观感,遂采用只显示时分加呼吸跳动形式。
2)为方便数据显示和调用,故采用json格式输出。
3)js库采用lunar.js,当然这个js库很强大,这里只用到了很少的几个函数,具体见:https://6tail.cn/calendar/api.html
4)演示字体采用华为鸿蒙字体,可自行下载安装 https://developer.huawei.com/consumer/cn/design/resource/
5)具体文件详见附件!
import win.ui;
/*DSG{{*/
var mainForm = win.form(text="aardio form";right=933;bottom=561;bgcolor=12861702;maximize=1)
mainForm.add(
staDate={cls="static";text="2024/05/28";left=11;top=416;right=149;bottom=450;align="right";center=1;color=15397364;db=1;dl=1;font=LOGFONT(h=-20;name='HarmonyOS Sans SC';weight=700);transparent=1;z=2};
staLunar={cls="static";text="-";left=758;top=469;right=880;bottom=503;center=1;color=15397364;db=1;dr=1;font=LOGFONT(h=-18;name='HarmonyOS Sans SC';weight=700);transparent=1;z=3};
staSolarTerms={cls="static";text="-";left=758;top=497;right=912;bottom=531;center=1;color=15397364;db=1;dr=1;font=LOGFONT(h=-18;name='HarmonyOS Sans SC';weight=700);transparent=1;z=4};
staTimeDot={cls="static";text=":";left=113;top=448;right=151;bottom=515;align="center";center=1;color=15397364;db=1;dl=1;font=LOGFONT(h=-64;name='HarmonyOS Sans SC';weight=700);transparent=1;z=6};
staTimeHour={cls="static";text="15";left=20;top=447;right=127;bottom=531;align="center";center=1;color=15397364;db=1;dl=1;font=LOGFONT(h=-64;name='HarmonyOS Sans SC';weight=700);transparent=1;z=1};
staTimeMin={cls="static";text="15";left=136;top=447;right=243;bottom=531;align="center";center=1;color=15397364;db=1;dl=1;font=LOGFONT(h=-64;name='HarmonyOS Sans SC';weight=700);transparent=1;z=7};
staWeek={cls="static";text="星期二";left=173;top=417;right=242;bottom=451;center=1;color=15397364;db=1;dl=1;font=LOGFONT(h=-20;name='HarmonyOS Sans SC';weight=700);transparent=1;z=5}
)
/*}}*/
var today=tostring(time(time.now(),"%Y/%m/%d"))
var timeHour=tostring(time(time.now(),"%H"))
var timeMin=tostring(time(time.now(),"%M"))
var week={
["0"]="星期天";
["1"]="星期一";
["2"]="星期二";
["3"]="星期三";
["4"]="星期四";
["5"]="星期五";
["6"]="星期六";
}
//设置农历、节气相关 lunarDate:农历年月日 currentSolarTerms:当前节气 nextSolarTerms:下一个节气 dateTime:下一个节气时间
setLunar=function(lunarDate,currentSolarTerms,dateTime1,nextSolarTerms,dateTime2){
//农历年月日
mainForm.staLunar.text=lunarDate
//节气
if(currentSolarTerms!=""){
mainForm.staSolarTerms.text="今日 "++currentSolarTerms//++tostring(time(dateTime1,"%H:%M:%S"))
}
else {
var nextSolarTermsDiff=math.abs(time.now().diffday(time(dateTime2)))+1
if(nextSolarTermsDiff<8){
mainForm.staSolarTerms.text="距 "++nextSolarTerms++" 还有 "++nextSolarTermsDiff++" 天"
}
}
}
import lunar;
var json=web.json.parse(lunar.getLunar());
setLunar(json.lunar.lunarDate,json.solarTerms[1].currentSolarTerms,json.solarTerms[1].dateTime,json.solarTerms[2].nextSolarTerms,json.solarTerms[2].dateTime)
//日期更新
dateUpdate=function(){
mainForm.staDate.text=time(time.now(),"%Y/%m/%d")
mainForm.staWeek.text=week[tostring(time().dayofweek)]
var json=web.json.parse(lunar.getLunar());
setLunar(json.lunar.lunarDate,json.solarTerms[1].currentSolarTerms,json.solarTerms[1].dateTime,json.solarTerms[2].nextSolarTerms,json.solarTerms[2].dateTime)
}
//初始化
dataInit=function(){
mainForm.staTimeHour.text =time(time.now(),"%H")
mainForm.staTimeMin.text =time(time.now(),"%M")
dateUpdate()
}
dataInit()
tmClock = mainForm.setInterval(
function(hwnd,msg,id,tick){
if(mainForm.staTimeDot.hide==1){
mainForm.staTimeDot.hide=0
}
else {
mainForm.staTimeDot.hide=1
}
//时钟更新
var timeHourNow=tostring(time(time.now(),"%H"))
if(timeHourNow!=timeHour){
mainForm.staTimeHour.text =time(time.now(),"%H")
timeHour=tostring(time(time.now(),"%H"))
}
//分钟更新
var timeMinNow=tostring(time(time.now(),"%M"))
if(timeMinNow!=timeMin){
mainForm.staTimeMin.text =time(time.now(),"%M")
timeMin=tostring(time(time.now(),"%M"))
}
//日期更新
var todayNow=tostring(time(time.now(),"%Y/%m/%d"))
if(todayNow!=today){
dateUpdate()
today=tostring(time(time.now(),"%Y/%m/%d"))
}
},1000/*毫秒*/
);
mainForm.show();
win.loopMessage();
return mainForm;
演示截图:
![](https://aardio.online/upload/files/20240617/1718621970.png)