如何实现用这个D500/D520通用型PLC协议云网关采集西门子S7-200 SMART的数据及远程控制和实时监控

时间: 2023-03-22 14:01:42 浏览: 60
要实现用D500/D520通用型PLC协议云网关采集西门子S7-200SMART的数据及远程控制和实时监控,可以按照以下步骤进行: 1. 确认设备和网络连接。将D500/D520通用型PLC协议云网关和西门子S7-200SMART连接到同一个网络中,并确保它们能够相互通信。 2. 配置设备参数。根据设备说明书,配置D500/D520通用型PLC协议云网关和西门子S7-200SMART的参数,包括IP地址、端口号、协议类型等。 3. 编写数据采集程序。使用支持西门子S7-200SMART协议的编程软件,编写数据采集程序,并将程序上传到D500/D520通用型PLC协议云网关中。 4. 远程控制和实时监控。使用远程监控软件,连接到D500/D520通用型PLC协议云网关,即可实现远程控制和实时监控西门子S7-200SMART的数据。 以上是一个基本的实现过程,具体的操作步骤和细节可能会因设备型号和软件版本而略有不同。
相关问题

D500/D520 通用型 PLC 协议云网关 产品使用

D500/D520通用型PLC协议云网关产品是一种用于将PLC设备接入云平台的网关产品。该产品采用现代化的通讯协议,支持多种PLC品牌和型号的设备接入,通过云平台实现设备的实时监控、数据采集和远程控制。同时,该产品还支持多种数据传输方式,如WIFI、以太网等,满足不同场景下的应用需求。

C语言实现农历查询

C语言实现农历查询可以使用农历算法来计算。以下是一个简单的示例程序,可以输入公历日期,然后输出对应的农历日期。 ```c #include <stdio.h> // 农历数据,以 1900 年为基准 int lunarInfo[] = { 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; // 判断闰年 int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; } // 计算公历到基准日期的天数 int daysFrom1900(int year, int month, int day) { int days = 0; for (int i = 1900; i < year; i++) { days += isLeapYear(i) ? 366 : 365; } for (int i = 1; i < month; i++) { if (i == 2) { days += isLeapYear(year) ? 29 : 28; } else { days += lunarInfo[(year - 1900) * 12 + i - 1] & 0x1f; } } days += day - 1; return days; } // 计算农历日期 void lunarCalendar(int year, int month, int day) { int days = daysFrom1900(year, month, day); int lunarYear = 1900; int lunarMonth = 1; int lunarDay = 1; while (days > 0) { int monthDays = lunarInfo[(lunarYear - 1900) * 12 + lunarMonth - 1] & 0x1f; int leapMonth = lunarInfo[lunarYear - 1900] & 0xf; if (lunarMonth == leapMonth + 1 && (lunarInfo[lunarYear - 1900] & 0x100) != 0) { monthDays = lunarInfo[(lunarYear - 1900) * 12 + lunarMonth - 1] >> 5; } if (days < monthDays) { break; } days -= monthDays; lunarDay++; if (lunarMonth == leapMonth + 1 && lunarDay == (lunarInfo[lunarYear - 1900] >> 20)) { lunarDay = 1; lunarMonth = leapMonth + 1; monthDays = lunarInfo[(lunarYear - 1900) * 12 + lunarMonth - 1] >> 5; } else if (lunarDay > monthDays) { lunarDay = 1; lunarMonth++; if (lunarMonth > 12) { lunarMonth = 1; lunarYear++; } monthDays = lunarInfo[(lunarYear - 1900) * 12 + lunarMonth - 1] & 0x1f; } } printf("%d年%d月%d日是农历%d年%d月%d日\n", year, month, day, lunarYear, lunarMonth, lunarDay); } int main() { int year, month, day; printf("请输入公历日期(格式:年 月 日):"); scanf("%d %d %d", &year, &month, &day); lunarCalendar(year, month, day); return 0; } ``` 该程序使用农历数据表 `lunarInfo` 来计算公历日期对应的农历日期。首先计算公历日期到基准日期(1900年1月31日)的天数,然后逐步推算农历日期。程序中还包含了判断闰年和计算每个月的天数等函数。

相关推荐

### 回答1: 要配置D500/D520通用型PLC协议云网关和西门子S7-200SMART的参数,您可以按照以下步骤操作: 1. 首先,确保您已经安装并连接了D500/D520通用型PLC协议云网关和西门子S7-200SMART。 2. 然后,在您的计算机上打开浏览器,并输入D500/D520通用型PLC协议云网关的IP地址。 3. 在登录页面输入您的用户名和密码,然后单击登录按钮。 4. 进入D500/D520通用型PLC协议云网关的配置界面后,找到西门子S7-200SMART的设置选项,并单击它。 5. 在设置页面中,输入S7-200SMART的IP地址、端口号和协议类型等参数。 6. 确认输入的参数无误后,单击保存按钮,保存设置。 通过以上步骤,您就可以成功配置D500/D520通用型PLC协议云网关和西门子S7-200SMART的参数,从而实现它们之间的通信。 ### 回答2: D500/D520 通用型 PLC 协议云网关和西门子 S7-200 SMART 通讯,需要配置相关参数才能实现连接。以下是配置参数的具体说明: 1. IP 地址:首先,要确保 D500/D520 云网关和 S7-200 SMART 在同一局域网中。给云网关和 S7-200 SMART 各自分配一个唯一的 IP 地址。可以通过以下步骤进行配置: a. 打开云网关的配置界面,输入网关的 IP 地址,确保其与 S7-200 SMART 在同一网络段。 b. 在 S7-200 SMART 控制器软件中,通过进行网络设置为控制器分配一个 IP 地址,也要确保其与云网关在同一网络段。 2. 端口号:配置云网关和 S7-200 SMART 之间的通信端口号,以确保两者之间的连接。可以通过以下步骤进行配置: a. 在云网关配置界面中,找到通信端口设置,可以将端口号设置为一个未被其他应用程序占用的端口。 b. 在 S7-200 SMART 控制器软件中,也可以进行通信端口设置,将其设置为与云网关配置的端口号相同。 3. 协议类型:D500/D520 云网关支持多种协议,包括 Modbus TCP、OPC UA、MQTT 等。而 S7-200 SMART 控制器是西门子自有的通信协议。 a. 在云网关配置界面中,选择与 S7-200 SMART 控制器通信所需的协议类型,例如,如果使用 Modbus TCP 协议,选择 Modbus TCP 协议类型。 b. 在 S7-200 SMART 控制器软件中,设定通信协议为与云网关相匹配的协议类型,如 Modbus TCP。 综上所述,要配置 D500/D520 通用型 PLC 协议云网关和西门子 S7-200 SMART 的参数,需设置相应的 IP 地址、端口号和协议类型,以确保两者之间的正确通信。 ### 回答3: 要配置D500/D520通用型PLC协议云网关和西门子S7-200SMART的参数,包括IP地址、端口号和协议类型,需按照以下步骤进行: 1. 首先确保D500/D520通用型PLC协议云网关和S7-200SMART及网络连接正常。 2. 进入D500/D520云网关的配置页面,登录管理员账号。 3. 在配置页面中,找到“设备管理”或类似选项,点击进入。 4. 在设备管理中,找到并点击添加设备或类似选项。 5. 在添加设备页面中,选择“西门子”或“Siemens”作为PLC设备供应商。 6. 输入西门子S7-200SMART的IP地址。可以在S7-200SMART的设置页面或与之相连的路由器上查找。 7. 输入西门子S7-200SMART的端口号。通常情况下,S7-200SMART的默认端口号为102。 8. 选择通信协议类型为S7-200。 9. 点击确认或保存,完成配置。 10. 接下来,可以进行参数测试和连接测试,确保D500/D520云网关和S7-200SMART之间的通信正常。 需要注意的是,以上步骤仅为一般性配置指南,实际操作可能会因设备型号和软件版本的不同而有所差异。因此,在配置前最好查阅相关设备和软件的用户手册,了解详细的配置步骤和要求。
要实现公历转为农历,需要用到农历计算的算法,以下是一个简单的C语言实现: c #include <stdio.h> // 农历信息结构体 typedef struct { int year; // 农历年份 int month; // 农历月份 int day; // 农历日 int isLeap; // 是否是闰月 } LunarDate; // 公历转农历 LunarDate solarToLunar(int year, int month, int day) { // 农历信息表 static int lunarInfo[] = { 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x0d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; int lunarYear, lunarMonth, lunarDay, isLeap; int leapMonth, leapMonthDays, totalDays, offsetDays; int i; // 计算1900年到当前年份之间的总天数 totalDays = 0; for (i = 1900; i < year; i++) { totalDays += 365; if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) { totalDays++; } } // 当年是否是闰年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { leapMonth = 1; // 闰月为1月 } else { leapMonth = 0; // 没有闰月 } // 如果当年有闰月,计算闰月天数 leapMonthDays = 0; if (leapMonth) { for (i = 1; i <= 12; i++) { if ((lunarInfo[year - 1900] & (0x10000 >> i)) != 0) { leapMonthDays = lunarInfo[year - 1900] & 0xffff; break; } } } // 加上当年的天数 totalDays += day; // 计算当年的闰月月份 isLeap = 0; for (i = 1; i <= 12; i++) { if (leapMonth && i == leapMonth + 1 && !isLeap) { i--; isLeap = 1; offsetDays = leapMonthDays; } else { offsetDays = (lunarInfo[year - 1900] & (0x80000 >> (i - 1))) != 0 ? 30 : 29; } if (isLeap && i == leapMonth + 1) { isLeap = 0; } totalDays -= offsetDays; if (totalDays <= 0) { break; } } lunarMonth = i; lunarDay = totalDays + offsetDays; lunarYear = year; // 如果是闰月,设置闰月标志 if (leapMonth && i == leapMonth + 1) { isLeap = 1; } else { isLeap = 0; } // 返回农历日期 LunarDate lunarDate; lunarDate.year = lunarYear; lunarDate.month = lunarMonth; lunarDate.day = lunarDay; lunarDate.isLeap = isLeap; return lunarDate; } int main() { int year, month, day; printf("请输入公历日期(格式:年 月 日):"); scanf("%d %d %d", &year, &month, &day); LunarDate lunarDate = solarToLunar(year, month, day); printf("农历日期:%d年", lunarDate.year); if (lunarDate.isLeap) { printf("闰"); } printf("%d月%d日\n", lunarDate.month, lunarDate.day); return 0; } 这个实现仅供参考,实际上农历计算的算法比较复杂,需要考虑到闰年、闰月等因素,因此建议使用现成的农历计算库,如 lunar-calendar。
以下是用C语言实现万年历并包含农历的完整代码: #include <stdio.h> #include <stdlib.h> // 返回某年某月的天数 int get_month_days(int year, int month) { int month_days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) { return 29; } return month_days[month - 1]; } // 返回某年的总天数 int get_year_days(int year) { int year_days = 0; for (int i = 1; i <= 12; i++) { year_days += get_month_days(year, i); } return year_days; } // 返回某年某月1号是星期几 int get_weekday(int year, int month) { int days = 0; for (int i = 1; i < year; i++) { days += get_year_days(i); } for (int i = 1; i < month; i++) { days += get_month_days(year, i); } days++; return days % 7; } // 判断某年是否是闰年 int is_leap_year(int year) { return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)); } // 返回某年某月的农历月份 char* get_lunar_month(int year, int month) { char* lunar_month[] = { "正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" }; int leap_month = get_leap_month(year); if (leap_month > 0 && month > leap_month) { month--; } return lunar_month[month - 1]; } // 返回某年某月的农历日期 char* get_lunar_day(int day) { char* lunar_day[] = { "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十" }; return lunar_day[day - 1]; } // 返回某年的闰月月份,如果没有返回0 int get_leap_month(int year) { int leap_month[] = { 0, 0x4bd8, 0x4ae0, 0xa570, 0x54d5, 0xd260, 0xd950, 0x6556, 0x56a0, 0x9ad0, 0x55d2, 0x4ae0, 0xa5b6, 0xa4d0, 0xd250, 0xd558, 0xb540, 0xb6a0, 0x95b5, 0x95b0, 0x49b0, 0x4978, 0xa4b0, 0xb4b8, 0x6a50, 0x6d40, 0xab60, 0x9575, 0x4af0, 0x4970 }; int leap = leap_month[year - 1900] & 0xf; leap = (leap_month[year - 1900] >> 4) == leap ? 0 : leap; return leap; } // 返回某年某月的农历天数 int get_lunar_days(int year, int month, int day) { int lunar_days[] = { 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x06556, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a4d0, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x095b5, 0x095b0, 0x049b0, 0x04978, 0x0a4b0, 0x0b4b8, 0x06a50, 0x06d40, 0x0ab60, 0x09575, 0x04af0, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab00, 0x0a8e0, 0x0ae50, 0x05acf, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a5, 0x095d0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af40, 0x0ab60, 0x09570, 0x04af0, 0x0a4d0, 0x0d4d0, 0x0d250, 0x0d53c, 0x0b540, 0x0b6a0, 0x195a6, 0x095b0, 0x049b0, 0x0a4b0, 0x0b258, 0x06a20, 0x06d10, 0x0aea0, 0x0a6d0, 0x0a5d0, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x055d9, 0x055b0, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, 0x14b63, 0x09370, 0x04970, 0x064b0, 0x0d534, 0x0e9d5, 0x0d550, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x0d0b6, 0x0d25f, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a4b0, 0x0b4b5, 0x06a90, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x0d4a9, 0x0ea50, 0x06b58, 0x055c0, 0x0ab20, 0x0a930, 0x0d5a5, 0x0d4d0, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af40, 0x0ab60, 0x09570, 0x04af0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a5, 0x095d0, 0x049b0, 0x0a7b0, 0x0a4b0, 0x0b4b7, 0x06a50, 0x06d40, 0x0ea50, 0x0da50, 0x05aa0, 0x076c6, 0x0a6d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d25f, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, 0x14b63 }; int lunar_day = 0; for (int i = 1; i < month; i++) { lunar_day += get_month_days(year, i); } lunar_day += day - 1; if (month > 2 && is_leap_year(year)) { lunar_day++; } if (lunar_day >= lunar_days[year - 1900]) { lunar_day = lunar_day - lunar_days[year - 1900] + 1; if ((lunar_days[year - 1900 + 1] & 0xf) == 0) { lunar_day--; } } return lunar_day; } // 返回某年某月某日的农历日期 void get_lunar_date(int year, int month, int day, char* lunar_date) { int lunar_year = 1900; int lunar_month = 1; int lunar_day = 1; int leap_month = get_leap_month(year); int days = 0; while (1) { int year_days = get_year_days(lunar_year); if (days + year_days > day) { break; } days += year_days; lunar_year++; } int months = 0; for (int i = 1; i <= 12; i++) { int month_days = get_month_days(lunar_year, i); if (i == leap_month + 1) { month_days += get_month_days(lunar_year, i - 1); } if (days + month_days > day) { lunar_month = i; lunar_day = day - days + 1; break; } days += month_days; months++; } sprintf(lunar_date, "%d年%s%s", lunar_year, get_lunar_month(lunar_year, lunar_month), get_lunar_day(lunar_day)); if (leap_month > 0 && lunar_month > leap_month) { sprintf(lunar_date, "%s(闰)", lunar_date); } } // 打印某年某月的日历 void print_calendar(int year, int month) { printf(" %d年%d月\n", year, month); printf("日 一 二 三 四 五 六\n"); int weekday = get_weekday(year, month); int month_days = get_month_days(year, month); for (int i = 0; i < weekday; i++) { printf(" "); } for (int i = 1; i <= month_days; i++) { if (i == 1 || weekday == 0) { printf("\n"); } printf("%2d ", i); weekday++; if (weekday == 7) { weekday = 0; } } printf("\n"); } int main() { int year, month, day; printf("请输入日期(yyyy-mm-dd): "); scanf("%d-%d-%d", &year, &month, &day); char lunar_date[20]; get_lunar_date(year, month, day, lunar_date); printf("农历日期: %s\n", lunar_date); print_calendar(year, month); return 0; } 注意:此代码仅为参考,可能存在不足之处,如有需要请自行进行修改和优化。
以下是获取一年的农历日期的 JavaScript 代码: javascript // 农历数据 var lunarInfo = [ 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 ]; // 获取某年的所有农历日期 function getLunarDates(year) { var lunarDates = []; var start = new Date(year, 0, 1); // 当年的第一天 var end = new Date(year, 11, 31); // 当年的最后一天 var lunarYear = getLunarYear(year); // 当年的农历年份 // 遍历当年每一天 for (var i = start; i <= end; i.setDate(i.getDate() + 1)) { var lunarDate = getLunarDate(i.getFullYear(), i.getMonth() + 1, i.getDate()); // 获取农历日期 var lunarMonth = lunarDate.month; // 农历月份 var lunarDay = lunarDate.day; // 农历日期 // 如果是闰月,则在闰月前面添加一个“闰”字 if (lunarMonth < 0) { lunarMonth = -lunarMonth; lunarDates.push("闰" + lunarMonth + "月" + getLunarDay(lunarDay)); } else { lunarDates.push(lunarMonth + "月" + getLunarDay(lunarDay)); } } return lunarDates; } // 获取某一天的农历日期 function getLunarDate(year, month, day) { var isLeap = false; // 是否是闰月 var leapMonth = 0; // 闰月月份 var offset = (new Date(year, month - 1, day).getTime() - new Date(1900, 0, 31).getTime()) / 86400000; // 计算天数偏移量 // 遍历农历年份的每个月,计算出对应的农历月份和日期 for (var i = 1900; i < 2100 && offset > 0; i++) { var yearDays = getLunarYearDays(i); // 当年的农历天数 offset -= yearDays; // 减去当年的农历天数 if (offset < 0) break; // 计算闰月 leapMonth = getLunarLeapMonth(i); if (leapMonth > 0 && i == leapMonth + 1900) { isLeap = true; yearDays = getLunarLeapMonthDays(i); } // 减去当月的天数 offset -= yearDays; if (offset < 0) break; } // 计算农历月份和日期 var month = i - 1900; var year = isLeap ? "闰" + month : month; var day = offset + yearDays; // 如果是闰月,则 month 取相反数 if (leapMonth == month && isLeap) { month = -month; } return { year: year, month: month, day: day }; } // 获取农历年份 function getLunarYear(year) { var i; var leap = 0; var temp = 0; // 计算从 1900 年到今年的总天数 for (i = 1900; i <= year && temp < 590000; i++) { temp = getLunarYearDays(i); leap = getLunarLeapMonth(i); } // 如果今年有闰月,返回闰月月份,否则返回 0 if (year == i - 1) { return leap; } else { return 0; } } // 获取某年的农历天数 function getLunarYearDays(year) { var i; var sum = 348; for (i = 0x8000; i > 0x8; i >>= 1) { sum += (lunarInfo[year - 1900] & i) ? 1 : 0; } return sum + getLunarLeapMonthDays(year); } // 获取某年的闰月月份,如果没有闰月则返回 0 function getLunarLeapMonth(year) { return lunarInfo[year - 1900] & 0xf; } // 获取某年的闰月天数,如果没有闰月则返回 0 function getLunarLeapMonthDays(year) { if (getLunarLeapMonth(year)) { return (lunarInfo[year - 1900] & 0x10000) ? 30 : 29; } else { return 0; } } // 获取农历日期的中文表示 function getLunarDay(day) { var chineseTen = ["", "十", "二十", "三十"]; var chineseNumber = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; var ten = parseInt(day / 10); var unit = day % 10; return chineseTen[ten] + chineseNumber[unit]; } 使用方法: javascript // 获取今年的所有农历日期 var lunarDates = getLunarDates(new Date().getFullYear()); console.log(lunarDates); // ["1月初一", "1月初二", "1月初三", "1月初四", "1月初五", ...]
要将新历转换为农历,需要使用农历计算的公式。以下是一个简单的示例代码,可以实现将输入的新历日期转化为对应的农历日期: #include <stdio.h> // 农历信息结构体 typedef struct { int year; // 农历年份 int month; // 农历月份 int day; // 农历日份 } LunarDate; // 计算农历日期 LunarDate getLunarDate(int year, int month, int day) { // 农历信息表 int lunarInfo[] = {0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x0a573, 0x055d0, 0x0a4d0, 0x0d0b6, 0x0ea50, 0x06e96, 0x0d4a0, 0x0d8a6, 0x0b6a0, 0x0baa0, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0}; // 计算距离1900年1月31日的天数 int totalDays = (year - 1900) * 365 + (year - 1900) / 4 + day - 31; for (int i = 0; i < month - 1; i++) { totalDays += lunarInfo[(year - 1900) * 12 + i] >> 16 & 0x1 ? 30 : 29; } // 计算农历年份 int lunarYear = 1900; int daysOfYear = lunarInfo[0] >> 16 & 0x1 ? 13 : 12; while (totalDays >= daysOfYear) { totalDays -= daysOfYear; daysOfYear = lunarInfo[(lunarYear - 1900 + 1) * 12] >> 16 & 0x1 ? 13 : 12; lunarYear++; } // 计算农历月份和日份 int lunarMonth = 1; for (int i = 0; i < 12; i++) { int daysOfMonth = lunarInfo[(lunarYear - 1900) * 12 + i] >> 16 & 0x1 ? 30 : 29; if (totalDays >= daysOfMonth) { totalDays -= daysOfMonth; lunarMonth++; } else { break; } } int lunarDay = totalDays + 1; LunarDate lunarDate = {lunarYear, lunarMonth, lunarDay}; return lunarDate; } int main() { int year, month, day; printf("请输入新历日期(年 月 日,用空格分隔):"); scanf("%d %d %d", &year, &month, &day); LunarDate lunarDate = getLunarDate(year, month, day); printf("对应的农历日期为:%d年%d月%d日\n", lunarDate.year, lunarDate.month, lunarDate.day); return 0; } 该代码中,使用农历信息表和公式计算输入的新历日期对应的农历日期,并输出结果。需要注意的是,该代码只实现了基本的农历计算,如果需要实现更复杂的功能,需要根据实际情况进行修改。
以下是一个简单的C语言函数,可以用来获取指定日期的农历日期: c #include <stdio.h> // 农历每个月的天数 int lunar_month_days[] = { 0x1F, 0x10, 0x01, 0x21, 0x12, 0x02, 0x22, 0x14, 0x04, 0x24, 0x16, 0x06 }; // 农历年份信息,包括闰月和每个月的天数 int lunar_year_info[] = { 0x04BD8, 0x04AE0, 0x0A570, 0x054D5, 0x0D260, 0x0D950, 0x16554, 0x056A0, 0x09AD0, 0x055D2, 0x04AE0, 0x0A5B6, 0x0A4D0, 0x0D250, 0x1D255, 0x0B540, 0x0D6A0, 0x0ADA2, 0x095B0, 0x14977, 0x04970, 0x0A4B0, 0x0B4B5, 0x06A50, 0x06D40, 0x1AB54, 0x02B60, 0x09570, 0x052F2, 0x04970, 0x06566, 0x0D4A0, 0x0EA50, 0x06E95, 0x05AD0, 0x02B60, 0x186E3, 0x092E0, 0x1C8D7, 0x0C950, 0x0D4A0, 0x1D8A6, 0x0B550, 0x056A0, 0x1A5B4, 0x025D0, 0x092D0, 0x0D2B2, 0x0A950, 0x0B557, 0x06CA0, 0x0B550, 0x15355, 0x04DA0, 0x0A5B0, 0x14573, 0x052B0, 0x0A9A8, 0x0E950, 0x06AA0, 0x0AEA6, 0x0AB50, 0x04B60, 0x0AAE4, 0x0A570, 0x05260, 0x0F263, 0x0D950, 0x05B57, 0x056A0, 0x096D0, 0x04DD5, 0x04AD0, 0x0A4D0, 0x0D4D4, 0x0D250, 0x0D558, 0x0B540, 0x0B5A0, 0x195A6, 0x095B0, 0x049B0, 0x0A974, 0x0A4B0, 0x0B27A, 0x06A50, 0x06D40, 0x0AF46, 0x0AB60, 0x09570, 0x04AF5, 0x04970, 0x064B0, 0x074A3, 0x0EA50, 0x06B58, 0x055C0, 0x0AB60, 0x096D5, 0x092E0, 0x0C960, 0x0D954, 0x0D4A0, 0x0DA50, 0x07552, 0x056A0, 0x0ABB7, 0x025D0, 0x092D0, 0x0CAB5, 0x0A950, 0x0B4A0, 0x0BA54, 0x0AD50, 0x055D9, 0x04BA0, 0x0A5B0, 0x15176, 0x052B0, 0x0A930, 0x07954, 0x06AA0, 0x0AD50, 0x05B52, 0x04B60, 0x0A6E6, 0x0A4E0, 0x0D260, 0x0EA65, 0x0D530, 0x05AA0, 0x076A3, 0x096D0, 0x04BD7, 0x04AD0, 0x0A4D0, 0x1D0B6, 0x0D250, 0x0D520, 0x0DD45, 0x0B5A0, 0x056D0, 0x055B2, 0x049B0, 0x0A577, 0x0A4B0, 0x0AA50, 0x1B255, 0x06D20, 0x0ADA0 }; // 获取农历年份 int get_lunar_year(int year, int month, int day) { int i, leap_month, is_leap, lunar_year; // 计算从1900年到当前年份之间的闰月数和是否有闰月 for (i = 1900, leap_month = 0; i < 2100 && month > 0; i++) { is_leap = lunar_year_info[i - 1900] & 0x10000; leap_month = is_leap ? (lunar_year_info[i - 1900] & 0xFF) : leap_month; month -= 12 - (is_leap ? 1 : 0); } // 计算当前是否为闰月 is_leap = (leap_month == month) && (month > 0); if (is_leap && day > lunar_month_days[month - 1]) { day -= lunar_month_days[month - 1]; if (month == leap_month + 1) { is_leap = 0; } } // 计算农历年份 lunar_year = i - 1900; if (month > 0) { lunar_year--; } return lunar_year; } // 获取农历月份 int get_lunar_month(int year, int month, int day) { int i, leap_month, is_leap, lunar_month; // 计算从1900年到当前年份之间的闰月数和是否有闰月 for (i = 1900, leap_month = 0; i < 2100 && month > 0; i++) { is_leap = lunar_year_info[i - 1900] & 0x10000; leap_month = is_leap ? (lunar_year_info[i - 1900] & 0xFF) : leap_month; month -= 12 - (is_leap ? 1 : 0); } // 计算当前是否为闰月 is_leap = (leap_month == month) && (month > 0); if (is_leap && day > lunar_month_days[month - 1]) { day -= lunar_month_days[month - 1]; if (month == leap_month + 1) { is_leap = 0; } } // 计算农历月份 if (is_leap) { lunar_month = -month; } else { for (i = 0; i < 12; i++) { if (day > lunar_month_days[i]) { day -= lunar_month_days[i]; } else { break; } } lunar_month = i + 1; } return lunar_month; } // 获取农历日期 int get_lunar_day(int year, int month, int day) { int i, leap_month, is_leap, lunar_day; // 计算从1900年到当前年份之间的闰月数和是否有闰月 for (i = 1900, leap_month = 0; i < 2100 && month > 0; i++) { is_leap = lunar_year_info[i - 1900] & 0x10000; leap_month = is_leap ? (lunar_year_info[i - 1900] & 0xFF) : leap_month; month -= 12 - (is_leap ? 1 : 0); } // 计算当前是否为闰月 is_leap = (leap_month == month) && (month > 0); if (is_leap && day > lunar_month_days[month - 1]) { day -= lunar_month_days[month - 1]; if (month == leap_month + 1) { is_leap = 0; } } // 计算农历日期 if (is_leap) { lunar_day = day; } else { for (i = 0; i < 12; i++) { if (day > lunar_month_days[i]) { day -= lunar_month_days[i]; } else { break; } } lunar_day = day; } return lunar_day; } int main() { int year = 2022, month = 10, day = 1; int lunar_year, lunar_month, lunar_day; lunar_year = get_lunar_year(year, month, day); lunar_month = get_lunar_month(year, month, day); lunar_day = get_lunar_day(year, month, day); printf("阳历日期:%d年%d月%d日\n", year, month, day); printf("农历日期:%d年", lunar_year); if (lunar_month < 0) { printf("闰%d月", -lunar_month); } else { printf("%d月", lunar_month); } printf("%d日\n", lunar_day); return 0; } 该函数假定1900年为农历1年1月1日,输入阳历日期,输出对应的农历日期。输出结果类似于“2022年闰八月十一日”的形式。
Android 提供了 Calendar 类来进行日期转换。但是,要将公历转换为农历需要借助第三方库或自己实现算法。 以下是一个自己实现农历转换算法的示例代码: java public class LunarUtil { private static final String[] CHINESE_MONTHS = { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊" }; private static final String[] CHINESE_DAYS = { "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十" }; private static final long[] LUNAR_INFO = new long[]{ 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; private static final int BASE_YEAR = 1900; private static final int BASE_MONTH = 1; private static final int BASE_DAY = 31; /** * 将公历日期转换成农历日期 * * @param year 公历年份 * @param month 公历月份,从1开始 * @param day 公历日 * @return 农历日期,格式为"农历x月x日" */ public static String solarToLunar(int year, int month, int day) { int offset = 0; int leapMonth = 0; int iYear, iMonth, iDay; try { Date baseDate = new SimpleDateFormat("yyyy-MM-dd").parse("1900-01-31"); Date nowDate = new SimpleDateFormat("yyyy-MM-dd").parse(year + "-" + month + "-" + day); long offsetTime = (nowDate.getTime() - baseDate.getTime()) / 86400000; for (iYear = BASE_YEAR; iYear < 2100 && offsetTime > 0; iYear++) { offset = getYearDays(iYear); offsetTime -= offset; } if (offsetTime < 0) { offsetTime += offset; iYear--; } leapMonth = getLeapMonth(iYear); boolean isLeap = false; for (iMonth = BASE_MONTH; iMonth < 13 && offsetTime > 0; iMonth++) { if (leapMonth > 0 && iMonth == leapMonth + 1 && !isLeap) { iMonth--; isLeap = true; offset = getLeapMonthDays(iYear); } else { offset = getMonthDays(iYear, iMonth); } if (isLeap && iMonth == leapMonth + 1) { isLeap = false; } offsetTime -= offset; } if (offsetTime == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { if (isLeap) { isLeap = false; } else { isLeap = true; iMonth--; } } if (offsetTime < 0) { offsetTime += offset; iMonth--; } iDay = (int) (offsetTime + 1); } catch (ParseException e) { e.printStackTrace(); return ""; } return CHINESE_MONTHS[iMonth - 1] + "月" + getChinaDayString(iDay, isLeap); } private static int getYearDays(int year) { int sum = 348; for (int i = 0x8000; i > 0x8; i >>= 1) { if ((LUNAR_INFO[year - BASE_YEAR] & i) != 0) { sum += 1; } } return sum + getLeapMonthDays(year); } private static int getLeapMonth(int year) { return (int) (LUNAR_INFO[year - BASE_YEAR] & 0xf); } private static int getLeapMonthDays(int year) { if (getLeapMonth(year) != 0) { if ((LUNAR_INFO[year - BASE_YEAR] & 0x10000) != 0) { return 30; } else { return 29; } } else { return 0; } } private static int getMonthDays(int year, int month) { if ((LUNAR_INFO[year - BASE_YEAR] & (0x10000 >> month)) == 0) { return 29; } else { return 30; } } private static String getChinaDayString(int day, boolean isLeap) { if (day == 1 && isLeap) { return "闰" + CHINESE_DAYS[day - 1]; } return CHINESE_DAYS[day - 1]; } } 使用方法: java String lunar = LunarUtil.solarToLunar(2022, 1, 1); System.out.println(lunar); // 农历正月初一
计算农历日期需要使用一些算法,以下是一个简单的 JavaScript 函数可以实现这个功能: javascript function lunarDate(year, month, day) { var lunarInfo = [ 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 ]; var daysInMonth = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ]; function isLeapYear(y) { return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0); } function lunarDays(y, m) { var idx = (y - 1900) * 12 + m + 12; return (lunarInfo[idx] & 0x1fffff); } function lunarMonthDays(y, m) { return ((lunarDays(y, m) & 0x100000) ? 30 : 29); } function lunarYearDays(y) { var days = 0; for (var i = 0; i < 12; i++) { days += lunarMonthDays(y, i); } return days; } function solarDays(y, m) { return daysInMonth[m] + ((m > 1 && isLeapYear(y)) ? 1 : 0); } var solarMonth = month - 1; var solarDaysCount = day; for (var i = 0; i < solarMonth; i++) { solarDaysCount += solarDays(year, i); } var lunarDaysCount = solarDaysCount + 11; var leapMonth = 0; var lunarYear = year; if (lunarYear < 1900 || lunarYear > 2100 || lunarDays(lunarYear, 0) > lunarDaysCount) { return { year: 0, month: 0, day: 0, leap: false }; } while (lunarDays(lunarYear, leapMonth) < lunarDaysCount) { lunarDaysCount -= lunarDays(lunarYear, leapMonth); leapMonth = (lunarDays(lunarYear, leapMonth) & 0x100000) ? 1 : 0; } var lunarMonth = leapMonth; for (var i = 1; i <= 12; i++) { var monthDays = lunarMonthDays(lunarYear, lunarMonth); if (lunarDaysCount >= monthDays) { lunarDaysCount -= monthDays; lunarMonth++; } else { break; } } return { year: lunarYear, month: lunarMonth, day: lunarDaysCount + 1, leap: (leapMonth > 0 && lunarMonth == leapMonth) }; } 这个函数接收三个参数:年、月、日,返回一个对象,包含农历年、月、日和是否有闰月等信息。例如,要计算 2022 年 1 月 1 日对应的农历日期,可以这样调用: javascript var result = lunarDate(2022, 1, 1); console.log(result.year + '年' + result.month + '月' + result.day + '日' + (result.leap ? '闰' : '')); 输出结果为: 辛丑年腊月廿六日 注意,这个函数只适用于 1900 年到 2100 年之间的日期。如果输入的日期超出了这个范围,函数会返回一个空对象。

最新推荐

用栈实现计算器(一个基于pyqt的python应用程序).zip

1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 适用工作项目、毕业设计,课程设计,项目源码均经过助教老师测试,运行无误,轻松复刻,欢迎下载 -------- 下载后请首先打开README.md文件(如有),仅供学习参考。

learning ebpf

oreily's book about ebpf

基于人工智能的药物分子筛选——比赛代码第15名.zip

基于人工智能的药物分子筛选——比赛代码第15名

自考(05710)多媒体技术应用资料整理.pdf

自考(05710)多媒体技术应用资料整理.pdf

基于网易新闻+评论的舆情热点分析平台源码&python毕业设计.zip

python项目,完整源码,项目可正常运行。

代码随想录最新第三版-最强八股文

这份PDF就是最强⼋股⽂! 1. C++ C++基础、C++ STL、C++泛型编程、C++11新特性、《Effective STL》 2. Java Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组、链表、回溯算法、贪心算法、动态规划、二叉树、排序算法、数据结构 5. 计算机基础 操作系统、数据库、计算机网络、设计模式、Linux、计算机系统 6. 前端学习 浏览器、JavaScript、CSS、HTML、React、VUE 7. 面经分享 字节、美团Java面、百度、京东、暑期实习...... 8. 编程常识 9. 问答精华 10.总结与经验分享 ......

基于交叉模态对应的可见-红外人脸识别及其表现评估

12046通过调整学习:基于交叉模态对应的可见-红外人脸识别Hyunjong Park*Sanghoon Lee*Junghyup Lee Bumsub Ham†延世大学电气与电子工程学院https://cvlab.yonsei.ac.kr/projects/LbA摘要我们解决的问题,可见光红外人重新识别(VI-reID),即,检索一组人的图像,由可见光或红外摄像机,在交叉模态设置。VI-reID中的两个主要挑战是跨人图像的类内变化,以及可见光和红外图像之间的跨模态假设人图像被粗略地对准,先前的方法尝试学习在不同模态上是有区别的和可概括的粗略的图像或刚性的部分级人表示然而,通常由现成的对象检测器裁剪的人物图像不一定是良好对准的,这分散了辨别性人物表示学习。在本文中,我们介绍了一种新的特征学习框架,以统一的方式解决这些问题。为此,我们建议利用密集的对应关系之间的跨模态的人的形象,年龄。这允许解决像素级中�

rabbitmq客户端账号密码

在默认情况下,RabbitMQ的客户端账号和密码是"guest"。 但是,默认情况下,这个账号只能在localhost本机下访问,无法远程登录。如果需要添加一个远程登录的用户,可以使用命令rabbitmqctl add_user来添加用户,并使用rabbitmqctl set_permissions设置用户的权限。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [保姆级别带你入门RabbitMQ](https:

数据结构1800试题.pdf

你还在苦苦寻找数据结构的题目吗?这里刚刚上传了一份数据结构共1800道试题,轻松解决期末挂科的难题。不信?你下载看看,这里是纯题目,你下载了再来私信我答案。按数据结构教材分章节,每一章节都有选择题、或有判断题、填空题、算法设计题及应用题,题型丰富多样,共五种类型题目。本学期已过去一半,相信你数据结构叶已经学得差不多了,是时候拿题来练练手了,如果你考研,更需要这份1800道题来巩固自己的基础及攻克重点难点。现在下载,不早不晚,越往后拖,越到后面,你身边的人就越卷,甚至卷得达到你无法想象的程度。我也是曾经遇到过这样的人,学习,练题,就要趁现在,不然到时你都不知道要刷数据结构题好还是高数、工数、大英,或是算法题?学完理论要及时巩固知识内容才是王道!记住!!!下载了来要答案(v:zywcv1220)。

通用跨域检索的泛化能力

12056通用跨域检索:跨类和跨域的泛化2* Soka Soka酒店,Soka-马上预订;1印度理工学院,Kharagpur,2印度科学学院,班加罗尔soumava2016@gmail.com,{titird,somabiswas} @ iisc.ac.in摘要在这项工作中,我们第一次解决了通用跨域检索的问题,其中测试数据可以属于在训练过程中看不到的类或域。由于动态增加的类别数量和对每个可能的域的训练的实际约束,这需要大量的数据,所以对看不见的类别和域的泛化是重要的。为了实现这一目标,我们提出了SnMpNet(语义Neighbourhood和混合预测网络),它包括两个新的损失,以占在测试过程中遇到的看不见的类和域。具体来说,我们引入了一种新的语义邻域损失,以弥合可见和不可见类之间的知识差距,并确保潜在的空间嵌入的不可见类是语义上有意义的,相对于其相邻的类。我们还在图像级以及数据的语义级引入了基于混�