万年历linux程序

合集下载

万年历算法研究及实现

万年历算法研究及实现

十一月 0
十二月 275 2
十二月 2
十三月 306 5
十三月 5
十四月 337 1
十四月 1
表一
表二
在处理闰年 2 月 29 日的问题上,也有两种方法,第一:
把二月排在一年的最后,管他闰不闰,反正是最后一天,这
种算法设计的简洁、优美。第二:加了一个 if 分支,简单易
懂,直观有效,且效率并不差。
好了,该解决这个“历史遗留问题”了。其实,并没有
11 分 14 秒的误差已经累积成 10 天,也就是历法上多了 10
天。于是教皇格利戈里八世进行了一次校正。他在 1582 年
2 月 24 日以教皇训令颁布,将 1582 年 10 月 5 日至 14 日
抹掉,并且对原来的闰年方法进行了校正。经过校正的历法
叫格利戈里历法,也就是我们现在用的公历。1752 年,英
M += 12;
Y--;
}
if ((Y < 1752)||((Y == 1752)&&(M < 9))||((Y ==
1752)&&(M == 9)&&(D < 3)))
/*判断是否在 1752 年 9 月 3 日前*/
A = (D + 2*M + 3*(M+1)/5 + Y + Y/4 +5) % 7;
什么数学公式能算出指定日期是星期几,我们可以试着拼凑
一个,不过何必呢?加个 if 分支不就解决问题了吗?下面就
可得到突破 1752 年 9 月 14 日日期限制的 C 语言程序。
/*假设输入的是正确的日期*/
#include <stdio.h>

Java万年历源代码,可显示公历、农历、系统时间、国际时间

Java万年历源代码,可显示公历、农历、系统时间、国际时间

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;public class wannianli extends JFrame implements ActionListener, MouseListener {private Calendar cld = Calendar.getInstance();//获取一个Calendar类的实例对象private String[] astr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };private DefaultTableModel dtm = new DefaultTableModel(null, astr);private JTable table = new JTable(dtm);private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton("上一年");private JButton bNextYear = new JButton("下一年");private JButton bLastMonth = new JButton("上月");private JButton bNextMonth = new JButton("下月");private JPanel p1 = new JPanel(); // 设立八个中间容器,装入布局控制日期的按钮模块private JPanel p2 = new JPanel(new GridLayout(3,2));//网格布局private JPanel p3 = new JPanel(new BorderLayout());//边界布局private JPanel p4 = new JPanel(new GridLayout(2,1));private JPanel p5 = new JPanel(new BorderLayout());private JPanel p6 = new JPanel(new GridLayout(2,2));private JPanel p7 = new JPanel(new GridLayout(2,1));private JPanel p8 = new JPanel(new BorderLayout());private JComboBox timeBox = newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;private JTextField jtfYear = new JTextField(5);// jtfYeaar年份显示输入框private JTextField jtfMonth = new JTextField(2);// jtfMouth月份显示输入框private JTextField timeField=new JTextField();//各城市时间显示框private static JTextArea jta = new JTextArea(10,5);//农历显示区private JScrollPane jsp = new JScrollPane(jta);private JLabel l = new JLabel("花江小精灵:亲!你可以直接输入年月查询.");private JLabel lt = new JLabel();private JLabel ld = new JLabel();private JLabel lu = new JLabel("农历和节气");private JLabel null1=new JLabel();private int lastTime;//private String localTime = null;private String s = null;private SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy年MM月dd 日 hh时mm分ss秒");public wannianli() {super("花江日历过去仅留追忆,未来刚生憧憬,唯有坚守本心,把握今天 ZYT 詹永堂 ");// 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗口关闭函数this.getContentPane().setLayout(new BorderLayout(9, 10));jta.setLineWrap(true);// 长度大于分配长度时候则换行jta.setFont(new Font("黑体", Font.BOLD, 16));table.setBackground(Color.white);table.setGridColor(Color.pink);// 星期之间的网格线是灰色的table.setBackground(Color.white);table.setColumnSelectionAllowed(true);// 将table中的列设置为可选择的table.setSelectionBackground(Color.pink);// 当选定某一天时背景颜色为黑色table.setSelectionForeground(Color.GREEN);table.setBackground(new Color(184,207, 229));// 日期显示表格为浅蓝色table.setFont(new Font("黑体", Font.BOLD, 24));// 日期数字字体格式table.setRowHeight(26);// 表格的高度table.addMouseListener(this); // 鼠标监听器、lu.setFont(new Font("黑体", Font.BOLD, 22));//农历标签格氏jtfYear.addActionListener(this);// 可输入年份的文本框// 为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this);timeBox.addItemListener(new TimeSelectedChangedListener());// 将按钮添加到Jpane上p1.add(bLastYear);p1.add(jtfYear);// 年份输入文本框p1.add(bNextYear);p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p3.add(jsp, BorderLayout.SOUTH);p3.add(lu,BorderLayout.CENTER);p3.add(ld, BorderLayout.NORTH);p4.add(lt);p4.add(l);p5.add(p4, BorderLayout.SOUTH);p5.add(sp, BorderLayout.CENTER);p5.add(p1, BorderLayout.NORTH);p6.add(timeBox);p6.add(null1);p6.add(timeField);p8.add(p2,BorderLayout.CENTER);p8.add(p7,BorderLayout.SOUTH);this.getContentPane().add(p3, BorderLayout.EAST);this.getContentPane().add(p5, BorderLayout.CENTER);this.getContentPane().add(p6,BorderLayout.SOUTH);this.getContentPane().add(p8,BorderLayout.WEST);String[] strDate = DateFormat.getDateInstance().format(new Date()) .split("-");// 获取日期cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]) - 1,0);showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]), cld);jtfMonth.setEditable(false);// 设置月份文本框为不可编辑jtfYear.setText(strDate[0]);jtfMonth.setText(strDate[1]);this.showTextArea(strDate[2]);ld.setFont(new Font("新宋体", Font.BOLD, 24));new Timer(lt).start();new TimeThread().start();this.setBounds(200, 200, 700, 350);this.setResizable(false);this.setVisible(true);}public void showCalendar(int localYear, int localMonth, Calendar cld) {int Days = getDaysOfMonth(localYear, localMonth) +cld.get(Calendar.DAY_OF_WEEK) -2;Object [] ai = new Object[7];lastTime = 0;for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++) {ai[i%7] =String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));if (i%7 == 6){dtm.addRow(ai);ai = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int Year, int Month) {//计算各月的天数if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Mont h==12){return 31;}if(Month==4||Month==6||Month==9||Month==11){return 30;}if(Year%4==0&&Year%100!=0||Year%400==0)//闰年{return 29;}else {return 28;}}public void actionPerformed(ActionEvent e)//从界面上获取年月数据{if(e.getSource() == jtfYear || e.getSource() == bLastYear || e.getSource() == bNextYear ||e.getSource() == bLastMonth || e.getSource() == bNextMonth){int m, y;try//控制输入的年份正确,异常控制{if (jtfYear.getText().length() != 4){throw new NumberFormatException();}y = Integer.parseInt(jtfYear.getText());m = Integer.parseInt(jtfMonth.getText());}catch (NumberFormatException ex){JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}ld.setText("没有选择日期");for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}if(e.getSource() ==bLastYear){ jtfYear.setText(String.valueOf(--y)); }if(e.getSource() ==bNextYear){jtfYear.setText(String.valueOf(++y)); }if(e.getSource() == bLastMonth){if(m == 1){jtfYear.setText(String.valueOf(--y));m = 12;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(--m));}}if(e.getSource() == bNextMonth){if(m == 12){jtfYear.setText(String.valueOf(++y));m = 1;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(++m));}}cld.set(y, m-1, 0);showCalendar(y, m, cld);}}public void mouseClicked(MouseEvent e){jta.setText(null);int r = table.getSelectedRow();int c = table.getSelectedColumn();if (table.getValueAt(r,c) == null){ld.setText("没有选择日期");}else{this.showTextArea(table.getValueAt(r,c));}}private void showTextArea(Object selected){ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日");}public static void main(String[] args){JFrame.setDefaultLookAndFeelDecorated(true);JDialog.setDefaultLookAndFeelDecorated(true);new wannianli();jta.setText(today());}private void updateTimeText(String timeZoneId) {if(timeZoneId != null){TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);dateFormat.setTimeZone(timeZone);Calendar calendar = Calendar.getInstance();calendar.setTimeZone(timeZone);timeField.setText(dateFormat.format(calendar.getTime()));}else{timeField.setText(null);}}private class TimeSelectedChangedListener implements ItemListener { public void itemStateChanged(ItemEvent e) {if (e.getStateChange()==ItemEvent.SELECTED) {if (e.getItem() instanceof String) {s = e.getItem().toString();}}}}private class TimeThread extends Thread{public void run(){while(true){updateTimeText(s);try{Thread.sleep(100);}catch(InterruptedException e){e.printStackTrace();}}}}class Timer extends Thread //显示系统时间{private JLabel lt;private SimpleDateFormat fy = new SimpleDateFormat(" Gyyyy.MM.dd HH:mm:ss ");public Timer(JLabel lt){this.lt=lt;}public void run(){while(true){try{lt.setText(fy.format(new Date()));this.sleep(500);}catch(InterruptedException ex){ex.printStackTrace();}}}}final private static long[] lunarInfo= 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 };final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };public final static String[] nStr1 = new String[] { "", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一","十二" };private final static String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };private final static String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };private final static String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };// 传回农历 y年的总天数final private static int lYearDays(int y) {int i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {if ((lunarInfo[y - 1900] & i) != 0)sum += 1;}return (sum + leapDays(y));}// 传回农历 y年闰月的天数final private static int leapDays(int y) {if (leapMonth(y) != 0) {if ((lunarInfo[y - 1900] & 0x10000) != 0)return 30;elsereturn 29;} elsereturn 0;}// 传回农历 y年闰哪个月 1-12 , 没闰传回 0final private static int leapMonth(int y) {return (int) (lunarInfo[y - 1900] & 0xf);}//传回农历 y年m月的总天数final private static int monthDays(int y, int m) {if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)return 29;elsereturn 30;}// 传回农历 y年的生肖final public static String AnimalsYear(int y) {return Animals[(y - 4) % 12];}//传入月日的offset 传回干支,0=甲子final private static String cyclicalm(int num) {return (Gan[num % 10] + Zhi[num % 12]);}// 传入 offset 传回干支, 0=甲子final public static String cyclical(int y) {int num = y - 1900 + 36;return (cyclicalm(num));}// 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6final private long[] Lunar(int y, int m) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(1900 + 1900, 1,31).getTime();Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;if (y < 2000)offset += year19[m - 1];if (y > 2000)offset += year20[m - 1];if (y == 2000)offset += year2000[m - 1];nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) {if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}// 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6final public static long[] calElement(int y, int m, int d) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime();Date objDate = new GregorianCalendar(y, m - 1, d).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}public final static String getChinaDate(int day) { String a = "";if (day == 10)return"初十";if (day == 20)return"二十";if (day == 30)return"三十";int two = (int) ((day) / 10);if (two == 0)a = "初";if (two == 1)a = "十";if (two == 2)a = "廿";if (two == 3)a = "三";int one = (int) (day % 10);switch (one) {case 1:a += "一";break;case 2:a += "二";break;case 3:a += "三";break;case 4:a += "四";break;case 5:a += "五";break;case 6:a += "六";break;case 7:a += "七";break;case 8:a += "八";break;case 9:a += "九";break;}return a;}public static String today() {Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);int year = today.get(Calendar.YEAR);int month = today.get(Calendar.MONTH) + 1;int date = today.get(Calendar.DATE);long[] l = calElement(year, month, date);StringBuffer sToday = new StringBuffer();try {sToday.append(sdf.format(today.getTime()));sToday.append(" \n");sToday.append(" \n");sToday.append(" \n");sToday.append(" 农历");sToday.append(cyclical(year));sToday.append('(');sToday.append(AnimalsYear(year));sToday.append(")年");sToday.append(" \n");sToday.append(" ");sToday.append(nStr1[(int) l[1]]);sToday.append("月");sToday.append(getChinaDate((int) (l[2])));return sToday.toString();} finally {sToday = null;}}private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年M月d日 EEEEE");public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) { }}。

Linux终端中的系统时间管理理解date和hwclock命令

Linux终端中的系统时间管理理解date和hwclock命令

Linux终端中的系统时间管理理解date和hwclock命令Linux终端中的系统时间管理——理解date和hwclock命令Linux系统中的系统时间对于计算机的正常运行至关重要。

在Linux 终端中,我们可以通过使用date和hwclock命令来管理和调整系统时间。

本文将详细介绍这两个命令的使用方法和功能,帮助读者深入了解Linux系统时间管理。

一、date命令date命令可以用于显示或设置系统的日期和时间,具体用法如下:1. 显示系统当前日期和时间:输入date即可显示系统当前日期和时间,格式如下:$ dateTue Oct 12 10:45:30 CST 20212. 设置系统日期和时间:使用date命令还可以设置系统的日期和时间,具体格式为:$ date -s "yyyy-mm-dd HH:MM:SS"例如,要将系统日期设置为2022年1月1日,时间为12:00:00,可以执行以下命令:$ date -s "2022-01-01 12:00:00"3. 格式化日期输出:date命令还可以通过指定格式化字符串来输出特定格式的日期,例如:$ date +"%Y年%m月%d日 %H时%M分%S秒"输出结果为:2021年10月12日 10时45分30秒二、hwclock命令hwclock命令用于管理系统的硬件时钟,它可以读取或设置硬件时钟与系统时间之间的同步关系。

下面是hwclock命令的常用方法:1. 显示硬件时钟:输入hwclock即可显示硬件时钟的当前值,格式如下:$ hwclockTue 12 Oct 2021 10:45:30 AM CST -0.815056 seconds2. 将系统时间写入硬件时钟:执行以下命令可以将系统时间写入硬件时钟:$ hwclock --systohc3. 将硬件时钟同步到系统时间:有时候,硬件时钟会比系统时间快或慢,我们可以使用以下命令将其同步到系统时间:$ hwclock --hctosys4. 设置硬件时钟的时间:使用hwclock命令还可以直接设置硬件时钟的时间,具体用法为:$ hwclock --set --date "yyyy-mm-dd HH:MM:SS"例如,要将硬件时钟设置为2022年1月1日,时间为12:00:00,可以执行以下命令:$ hwclock --set --date "2022-01-01 12:00:00"三、小结通过使用date和hwclock命令,我们可以轻松管理Linux系统的日期和时间。

C语言课程设计万年历 完整版

C语言课程设计万年历  完整版

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

万年历程序实验报告

万年历程序实验报告

万年历程序实验报告一、实验目的与要求1.实验目的:(1)能按照软件工程的思想,采用面向过程的方法开发出一个小型软件系统。

(2).在软件系统开发过程中,能综合利用一门编程语言、和软件工程二门课程的知识。

(3).通过实例使同学们掌握结构化数据流分析技术。

2.要求:(1)软件需求分析:要求做到使用结构化数据流分析技术分析课题需求,写出详细的数据流图和数据字典,数据流图的基本处理的个数不得少与5个。

(2)软件设计与编码:要求做到对上一实验的软件需求进行软件结构设计,模块数不少于四个。

然后再进行详细设计并编码。

程序要符合结构化程序的要求。

(3)软件测试和调试:要求掌握如何设计测试方案、撰写测试说明书,并掌握程序修改的常用技术。

要求对上一实验所编的程序进行测试,要分步进行,要有详细的测试说明书,要测试通过。

二、实验方案(一)软件需求分析1.需求分析:编制一个万年历程序,程序包括的功能查询具体某年某月某日是星期几,查询某一年是否闰年,打印某一年的年历。

2.根据需求画出初步的数据流图:把“万年历系统”细化,得出完整的数据流图如下:3.根据需求分析与数据流图,写出卡片式的数据字典(2)软件设计与编码1.首先进行总体设计,根据需求,系统应该划分功能模块如下:2.进行详细设计 按照需求,本系统有上图所示的三个功能模块,所以在编码设计的时候,应该就分别设计三个功能模块,三个功能模块主要就是三个分别的算法。

先定义本程序主要的几个数据项:char*month_str[]={"January","February","March","April","May","June","July","August","September","Oc tober","November","December"}; //月份的名称,在列印年历的功能时候使用到char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};//星期,在查询具体某天是星期几时候使用到接着就是三个算法,因为三个算法都是借鉴别人的,所以就不在这里显示了,最后在main 函数用switch 语句把三个功能组合起来。

万年历算法的实现

万年历算法的实现

/** cal.c** Created on: Apr 10, 2011* Author: Administrator** 现行的格里历是从儒略历演化而来的。

儒略历每4年一个润年,润年366天,平年365天。

* 如果从公元1年算的话,那么凡是能够被4整除的都是润年。

从天文角度看,儒略历这种* 历法是有误差的,到16世纪误差已经达到了10天。

1582年,罗马教皇对儒略历进行了* 一次校定,该年的10-5到10-14这10天被抹掉,并规定凡不能被400整除的世纪年不再* 算为润年,校定之后的儒略历即为现行的格里历。

** 但是英国直到1752年才开始使用格里历,此时时间误差已经达到了11天,原因是1700* 年在儒略历中是润年,而在格里历中是平年。

1752年英国议会决定将本年的9-3到9-13* 这11天抹掉,以同步格里历。

当时美国不是英国的殖民地,所以在美国的日历中也是没有* 1752-9-3到1752-9-13这11天的。

我们知道UNIX系统源于美国,Linux系统源于UNIX,* 这就是为什么当我们在Linux系统中敲"cal 9 1752"这条命令时,会看到一个只有19天* 的9月。

** 以上内容参考自维基百科** 本程序模似Linux中cal命令的部分功能。

允许输入的年分为1...9999。

* 编译器:gcc V4.5.0** 分析:* 1752年是特殊年,1752-9月是特殊年中的特殊月。

** 1752-9-2之前,采用的是儒略历,凡能被4整除都为润年;1752-9-14之后,采用的是* 格里历,不能被400整除的世纪年不再作为润年。

** 格里历闰年计算方法* 世纪年***4000的倍数**3200/1900的倍数400的倍数100的倍数4的倍数* 结果不闰不闰闰不闰闰 * 注:* 3200/1900的倍数是天文科学家研究出来* 增加4000的倍数不闰更准确,但目前只是世纪年还不足4000,因此尚未用途** 格里历在400年的周期中有146,097天,恰好是20,871 星期。

C++程序设计(万年历——说明书)

C++程序设计(万年历——说明书)

C++程序设计说明书题目:万年历班级学号:学生姓名:目录一.应用程序的名称二.应用程序的主题、设计目的三.应用程序简介1.程序的基本结构及内容2。

程序的运行环境四.主要运行界面的介绍五.程序亮点六.课程设计中存在的问题及解决方法一.课程设计名称万年历二.应用程序要求、目的主题:万年历目的:实现对年月的查询三.应用程序简介(1)基本结构:整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month[]数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。

在主函数中运用while 语言与switch语句的嵌套,是程序拥有了循环的功能.用fflush(stdin);语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。

万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。

所以会改变day_of_month[]数组中的二月份的数值。

二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。

而对于判断周几,需要运用公式:w=(y+[y/4]+[c/4]—2c+[26(m+1)/10]+d-1)%7并用if语句使用判断。

通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码.(2)源程序代码:#include〈stdio.h>#include 〈string。

h〉#include 〈time.h>#include <math。

h〉#include 〈windows。

软件测试(万年历)

软件测试(万年历)

目录摘要 (1)1引言 (2)1.1编写目的 (2)1.2背景 (2)2软件测试 (2)2.1简介 (2)2.2方法 (2)2.3测试项目 (3)3.软件设计 (3)4.软件测试图 (4)4.1软件测试方法 (4)4.2软件测试内容 (4)4.2.1等价类测试 (4)4.2.2 边界值测试 (5)4.2.3 因果图 (5)4.2.4 其他功能测试 (5)4.3测试用例 (5)4.3.1 等价类测试用例 (5)4.3.2 边界值测试用例 (6)4.4软件后期改进展望 (10)5.总结 (10)参考文献 (11)摘要万年历是一个强大的日历系统,它可以显示当前的日期与时间,而且还可以通过它可以实现对过去,现在以及将来日期的查询,在查询日期时有两种选择方式,第一从下拉列表控件中选择年份与月份,另一个你可以通过手动输入年份月月份来进行查询,则可得到相应的日历,还可以在本日历上右击鼠标,及会出现菜单,当你点击时,将会将日历的显示转到今天。

本系统还实现了系统托盘的功能,并且通过鼠标右键点击系统图标来进行该系统的显示与退出。

关键词:万年历,界面设计,系统托盘,实用,便捷1引言1.1编写目的根据测试计划报告,对软件进行测试,详细记录测试过程,以对软件的质量进行评价,为软件设计人员提供BUG依据,故做产生测试分析报告。

1.2背景为了使改系统更加完善,使用户能够有更好更加方便的体验,且针对其中出现的一些问题,进行修改,使其更加完善,方便。

2软件测试2.1简介软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。

执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。

2.2方法软件测试的主要方法包括黑盒测试和白盒测试:白盒测试:是通过程序的源代码进行测试而不使用用户界面。

这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。

万年历程序

万年历程序

万年历程序简介万年历(Perpetual Calendar)是一个可以显示公历和农历的时间工具。

在这个文档中,我们将讨论如何编写一个简单的万年历程序,以及其实现原理和功能。

功能该万年历程序将具备以下功能:1.显示当前日期2.显示当前周数3.显示当前月份的日历4.显示指定年份和月份的日历实现原理为了实现万年历程序,我们需要使用一些基本的计算方法。

以下是一些相关的计算原理:判断某年是否是闰年判断某年是否是闰年可以使用以下公式:is_leap_year = (year % 4 == 0 and year % 100 ! = 0) or (year % 400 == 0)若上述公式的值为真,则表示该年份是闰年。

计算指定年份和月份的天数可以使用以下公式来计算指定年份和月份的天数:days_in_month = [31, # 1月28 + is_leap_year, # 2月31, # 3月30, # 4月31, # 5月30, # 6月31, # 7月31, # 8月30, # 9月31, # 10月30, # 11月31 # 12月]这样,我们就可以得到每个月份的天数。

判断某年某月的第一天是星期几我们可以使用Zeller’s Congruence算法来判断某年某月的第一天是星期几。

以下是该算法的公式:h = (day + 26*(month+1)//10 + k + k//4 + j//4 + 5*j) % 7其中,h是星期几(0代表星期六,1代表星期日,依次类推),day是月份的第一天的日期,month是月份(3代表三月,4代表四月,依次类推),k是该年的前两位数,j是该年的后两位数。

实现步骤以下是实现万年历程序的步骤:1.获取当前日期和时间2.使用相关公式判断当前年份是否是闰年3.显示当前日期和时间4.计算当前周数并显示5.获取当前月份的相关信息:年份、月份、天数、星期几6.显示当前月份的日历7.提供用户界面,允许用户输入指定的年份和月份8.使用相关算法计算指定年份和月份的日历9.显示指定年份和月份的日历示例代码以下是使用Python语言实现的一个简单的万年历程序:```python import datetime获取当前日期today = datetime.date.today() current_year = today.year current_month = today.month current_day = today.day判断当前年份是否是闰年is_leap_year = (current_year % 4 == 0 and current_year % 100 != 0) or (current_year % 400 == 0)显示当前日期和时间print(。

实现一个简单的日历程序

实现一个简单的日历程序

实现一个简单的日历程序随着数字化时代的到来,我们的日常生活变得越来越忙碌且充满挑战。

其中,日常的计划和时间管理也变得越来越重要。

因此,一个好用的日历程序就是非常必要的。

在本文中,我们将讲述如何实现一个简单的日历程序,以便帮助我们更好地管理时间。

第一步:确定需求在开发一个日历程序之前,我们需要先确定用户的需求。

一个日历程序应该包含哪些功能呢?我们可以考虑以下几个方面:1. 显示当前日期和时间2. 显示日历3. 添加和删除事件或任务4. 提醒用户任务的到期日期和时间5. 根据用户的需求显示不同的视图,如日视图和周视图这些功能应该可以满足大多数用户的需求,但是,日历程序的需求也会因人而异。

因此,在实现一个日历程序之前,我们需要确定实际用户的需求。

第二步:选择开发平台目前,有很多编程语言可以用于开发日历程序,如Python、Java和C#等。

我们需要选择一个最适合我们的平台来开始日历程序的开发。

在本文中,我们将以Python作为开发语言,使用PyQt5作为主要的GUI库,从而实现日历程序。

这是一种非常流行的选择,并且有很多资源可以供我们使用。

第三步:实现基本UI界面一旦我们选择了平台,我们就可以开始着手实现日历程序了。

在本步中,我们需要搭建一个UI界面,以便用户可以使用日历程序。

我们可以使用Qt Designer来设计和编辑UI界面。

在这个步骤中,我们需要考虑以下几个方面:1. 选择一个合适的UI布局,如Widget或GridLayout。

2. 创建所需的窗口、标签、文本框、按钮等UI元素,并将它们放置在适当的位置。

3. 根据设计要求调整UI元素的大小和布局。

一旦我们的UI界面完成了,我们就可以继续实现日历程序的其它功能了。

第四步:实现日历显示功能日历程序最基本的功能就是显示日历。

在这一步中,我们需要根据用户的需求来实现不同的日历视图。

例如,我们可以展示一天、一周或一月的日期。

我们可以使用Python中已有的datetime 模块来计算和显示日期,然后再添加到我们的UI界面中。

linux上时间不对的调整方案

linux上时间不对的调整方案

linux上时间不对的调整方案在Linux上调整时间的方法有多种,具体取决于你的系统版本和所使用的工具。

以下是一些常见的调整时间的方法:1. 使用date命令手动调整时间:可以使用date命令来手动设置系统时间。

例如,要将时间设置为2022年1月1日12点00分,可以使用以下命令:sudo date -s "2022-01-01 12:00:00"请注意,这需要root权限。

2. 使用timedatectl命令:许多Linux发行版都提供了timedatectl命令,可以用来管理系统时间和时区。

你可以使用该命令来设置系统时间、时区、同步网络时间等。

例如,要将系统时间设置为UTC时间,可以使用以下命令:sudo timedatectl set-timezone UTC.要同步网络时间,可以使用以下命令:sudo timedatectl set-ntp true.3. 使用NTP服务:NTP(Network Time Protocol)是一种用于同步计算机系统时间的协议。

你可以配置系统以从NTP服务器同步时间。

大多数Linux发行版都提供了NTP客户端软件包,例如ntp或chrony。

你可以安装并配置这些软件包,以便系统可以自动从NTP服务器同步时间。

4. 检查硬件时钟:有时,系统时间不正确可能是由于硬件时钟的问题。

你可以使用hwclock命令来检查和调整硬件时钟。

例如,要将硬件时钟设置为和系统时间一致,可以使用以下命令:sudo hwclock --systohc.总的来说,调整Linux系统时间的方法有很多种,你可以根据具体情况选择合适的方法来进行调整。

如果你遇到时间不对的问题,建议先检查系统时间和时区设置,然后再考虑是否需要同步网络时间或调整硬件时钟。

万年历程序代码

万年历程序代码

/*****************************************************4字LED点阵屏+DS1302万年历电子钟C 程序*******************************************************DS1302 接线图Vcc2 CLK I/O /RST| | | |-------------------| 8 7 6 5 || DS1302 || || 1 2 3 4 |-------------------| | | |VCC1 GND1 脚接+5V 2,3脚32768HZ晶振4脚接地5脚接S51的P02 6脚接S51的P01 7接S51的P008脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容电压在2.5V以上即可维持595连级输出数据,138行驱动。

*///(本程序引用网上程序,有点BUG经过修改后可以使用,经过修改调整加上了温度显示功能,节日提醒功能和家人生日提醒功能。

//程序没有有效简化)07电气工程,付春平!//手动添加定时器2寄存器定义sfr T2CON = 0xC8;(special function register)sfr TL2 = 0xCC;sfr TH2 = 0xCD;sfr RCAP2L = 0xCA;sfr RCAP2H = 0xCB;sbit TF2 = T2CON^7;sbit EXF2 = T2CON^6;sbit RCLK = T2CON^5;sbit TCLK = T2CON^4;sbit EXEN2 = T2CON^3;sbit TR2 = T2CON^2;sbit C_T2 = T2CON^1;sbit CP_RL2= T2CON^0;//sbit ET2 =0xAD;#include<A T89x51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intunsigned char irtime;//红外用全局变量bit irokk;unsigned char IRcord[2];unsigned char irdata[17];unsigned char data temp_data[2] = {0x00,0x00} ;void Ircordpro(void);uchar code hanzi[]; //汉字字模uchar code hanzi1[]; //汉字字模uchar code timer[18][16]; //0~9数字uchar code sw[]; //138驱动数据void Show_word(); //待机显示按三秒间隔分别显示年、月日、星期、时分秒。

python实现的阳历转阴历(农历)算法

python实现的阳历转阴历(农历)算法

python实现的阳历转阴历(农历)算法搜索了好⼏个python实现的万年历多有部分时间有问题,好多是来⾃这个代码:复制代码代码如下:#!/usr/bin/env python# -*- coding: utf-8 -*-'''Usage: ccal Month [4-Digit-Year]or: ccal 4-Digit-Year MonthThis Python script is to show Solar and Lunar calender at thesame time. You need to have Python (2.0 or above) installed.Acceptable date range: 1900/2 -- 2049/12Output contains Chinese characters (mainland GB2312 encoding),must be viewed in a Chinese-enabled system or "cxterm" etc.programms under UNIX X-Windows.The major reference for me to compose this program is:lunar-2.1.tgz (1992), composed byFung F. Lee <lee@> andRicky Yeung <Ricky.Yeung@> .And Lee and Yeung refered to:1. "Zhong1guo2 yin1yang2 ri4yue4 dui4zhao4 wan4nian2li4"by Lin2 Qi3yuan2. 《中国阴阳⽇⽉对照万年历》.林2. "Ming4li3 ge2xin1 zi3ping2 cui4yan2" by Xu2 Le4wu2.《命理⾰新⼦平粹⾔》.徐3. Da1zhong4 wan4nian2li4. 《⼤众万年历》Version:0.3.2, Jan/16/2007, according to sprite's information, changed 3 codes:1954: 0x0a5d0 --> 0x0a5b0, 1956: 0x052d0 --> 0x052b01916: 0x0d6a0 --> 0x056a00.3.1, Jan/15/2007, changed 1978's code from 0xb5a0 to 0xb6a0.A young lady's birth day (lunar 1978/8/4) problem reportedon internet -- informed by sprite at 0.3.0, Sep/25/2006, add coding line, prevent python to report warning0.2.0, Jan/6/2002, ShengXiao(⽣肖), lunar leap month(闰⽉)added.0.1.0, Jan/4/2002--- Changsen Xu <xucs007@>'''#Remember, in this program:# month=0 means Januaray, month=1 means February ...;# day=0 means the first day of a month, day=1 means the second day,# so as to ease manipulation of Python lists.# year=0 is 1900, until the last step to outputdaysInSolarMonth= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]lunarMonthDays = [29,30] # a short (long) lunar month has 29 (30) days */shengXiaoEn = ["Mouse", "Ox", "Tiger", "Rabbit", "Dragon", "Snake","Horse", "Goat", "Monkey", "Rooster", "Dog", "Pig"]shengXiaoGB = ["⿏", "⽜", "虎", "兔", "龙", "蛇", "马", "⽺", "猴", "鸡","狗", "猪"]zhiGB = ["⼦", "丑", "寅", "卯", "⾠", "巳", "午", "未", "申", "⾣","戌", "亥"]ganGB = ["甲", "⼄", "丙", "丁", "戊", "⼰", "庚", "⾟", "壬", "癸"] monthEn = ['January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November','December']weekdayEn = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]weekdayGB = ["⼀", "⼆", "三", "四", "五", "六", "⽇"]numGB = ['○', "⼀", "⼆", "三", "四", "五", "六", "七", "⼋", "九","⼗"]lunarHoliday = {'0_0':'春节', '4_4':'端午', '7_14':'中秋', '8_8':'重阳','0_14':'元宵'}# encoding:# b bbbbbbbbbbbb bbbb# bit# 1 111111000000 0000# 6 543210987654 3210# . ............ ....# month# 000000000111# M 123456789012 L## b_j = 1 for long month, b_j = 0 for short month# L is the leap month of the year if 1<=L<=12; NO leap month if L = 0. # The leap month (if exists) is long one if M = 1.yearCode = [0x04bd8, # 19000x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, # 19050x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, # 19100x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, # 19150x056a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, # 19200x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, # 19250x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, # 19300x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, # 19350x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, # 19400x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, # 19450x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, # 19500x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, # 19550x052b0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, # 19600x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, # 19650x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, # 19700x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, # 19750x0d558, 0x0b540, 0x0b6a0, 0x195a6, 0x095b0, # 19800x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, # 19850x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, # 19900x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, # 19950x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, # 20000x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, # 20050x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, # 20100x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, # 20150x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, # 20200x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, # 20250x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, # 20300x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, # 20350x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, # 20400x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, # 20450x0aa50, 0x1b255, 0x06d20, 0x0ada0 # 2049]yearsCoded = len(yearCode)from sys import argv, exit, stdoutfrom time import time, localtimeow=stdout.writeclass LunarYearInfo:def __init__(self):self.yearDays = 0self.monthDays = [0]*13self.leapMonth = -1 # -1 means no lunar leap monthyearInfo = [0]*yearsCoded #global variablefor i in range(yearsCoded):yearInfo[i] = LunarYearInfo()class Date:def __init__(self, year, month, day, weekday=-1, gan=-1, zhi=-1):self.year =yearself.month =monthself.day =dayself.weekday=weekdayself.gan =ganself.zhi =zhisolar1st = Date(0, 0, 30, weekday=2) #Wednesday, January 31, 1900 lunar1st = Date(0, 0, 0, weekday=2, gan=6, zhi=0)#Wednesday, First day, First month, 1900, 庚⼦年def error(msg):print 'Error:', msg; exit(0)def isSolarLeapYear (year):year=year+1900return (year%4 == 0) and (year%100 != 0) or (year%400 == 0) baseYear=1201 - 1900# in fact, real baseYear=1201. In order to ease calculation of# leap years. real baseYear must conform to:# realBaseYear%4==1 and realBaseYear%400==1.# Assert realBaseYear < solar1st.year .# Compute the number of days from the Solar First Date# month=0 means January, ...def solarDaysFromBaseYear(d): #d is a Date classdelta = d.year - baseYearoffset = delta*365 + delta/4 - delta/100 + delta/400for i in range(d.month):offset += daysInSolarMonth[i];if d.month>1 and isSolarLeapYear(d.year):offset += 1offset += d.day## print '___', year, month, day, 'offset=', offset ########return offset# Compute the number of days from the Solar First Date# month=0 means January, ..., year=0 means 1900, ...def solarDaysFromFirstDate (d): #d is a Date classreturn solarDaysFromBaseYear (d) - solarDaysFromBaseYear (solar1st) def calcLunarDaysPerMonth(iYear):code = yearCode[iYear]leapMonth = code&0xf #leapMonth==0 means no lunar leap monthcode >>= 4for iMonth in range(12):yearInfo[iYear].monthDays[11-iMonth] = lunarMonthDays [code&0x1] code >>= 1if leapMonth>0:yearInfo[iYear].leapMonth = leapMonth-1yearInfo[iYear].monthDays.insert (leapMonth,lunarMonthDays [code & 0x1])def calcAllLunarYearsInfo():for iYear in range(yearsCoded):calcLunarDaysPerMonth (iYear)for iMonth in range(13):yearInfo[iYear].yearDays += yearInfo[iYear].monthDays[iMonth]#input dateSolar, return (dateLunar, isLunarMonthOrNot)def solar2Lunar(d): #d is a Date classdLunar = Date(-1, -1, -1) #unknown lunar Date classoffset = solarDaysFromFirstDate(d)dLunar.weekday = (offset + solar1st.weekday)%7for iYear in range(yearsCoded):if offset < yearInfo[iYear].yearDays:dLunar.year = iYear; breakoffset -= yearInfo[iYear].yearDaysif dLunar.year == -1: error ("Date out of range.")dLunar.gan = (dLunar.year + lunar1st.gan) % 10dLunar.zhi = (dLunar.year + lunar1st.zhi) % 12for iMonth in range(13):if offset< yearInfo[dLunar.year].monthDays[iMonth]:dLunar.month = iMonth; breakoffset -= yearInfo[dLunar.year].monthDays[iMonth]dLunar.day = offsetisLeapMonth=0if yearInfo[dLunar.year].leapMonth >=0:if dLunar.month == yearInfo[iYear].leapMonth + 1:isLeapMonth=1if dLunar.month > yearInfo[dLunar.year].leapMonth:dLunar.month -= 1return (dLunar, isLeapMonth)def getSolarDaysInMonth (year, month):if isSolarLeapYear(year) and month==1:return 29else: return daysInSolarMonth[month]def num2GB (num):if num==10:return '⼗'elif num>10 and num<20:return '⼗' + numGB[num-10]tmp=''while num>10:tmp = numGB[num%10] + tmpnum = int(num/10)tmp = numGB[num] + tmpreturn tmpdef lunarDate2GB (dLunar, isLeapMonth):tmp = str(dLunar.month)+'_'+str(dLunar.day)if lunarHoliday.has_key( tmp ):return '[0;33;44m%s[0m '% lunarHoliday[tmp] + \' '*(6-len(lunarHoliday[tmp]))elif dLunar.day==0:tmp2 = '闰'*isLeapMonth + num2GB(dLunar.month+1) +'⽉'return '[7m%s[0m' % tmp2 + ' '*(8-len(tmp2))elif dLunar.day<10:return '初' + num2GB(dLunar.day+1)else:return num2GB(dLunar.day+1)def outputCalendar(year, month):dLunar = Date(-1,-1,-1)ow ('\n 阳历%d年%d⽉ ' % (year+1900, month+1) )for iDay in range( getSolarDaysInMonth(year, month) ):dSolar = Date(year, month, iDay)dLunar, isLeapMonth = solar2Lunar (dSolar)if iDay==0:ow ('始于阴历%s年%s%s⽉ (%s%s年, ⽣肖属%s)\n' %( num2GB(dLunar.year+1900), '闰'*isLeapMonth,num2GB(dLunar.month+1),ganGB [dLunar.gan], zhiGB[dLunar.zhi], shengXiaoGB[dLunar.zhi] ))ow ('='*74 + '\n')for i in range(7):ow ("%3s %2s " % (weekdayEn[i][:3], weekdayGB[i]) )ow('\n\n')for i in range(dLunar.weekday): ow(' '*11)elif dLunar.weekday==0: ow('\n')ow ( "%2d %-8s" %(iDay+1, lunarDate2GB(dLunar, isLeapMonth) ) )ow('\n\n')def checkArgv (argv):argc = len(argv)if argc==1 or argv[1] in ('-h', '--help'):print __doc__; exit(0)#in case people input arguments as "4-digit-year month"if argc==3 and len(argv[1]) == 4 and len(argv[2]) in (1,2):argv[1], argv[2] = argv[2], argv[1]#Get monthmonth=-1for iMonth in range(12):if argv[1].lower() == monthEn[iMonth].lower() or \argv[1].lower() == monthEn[iMonth][:3].lower():month = iMonth+1; breakif month==-1:month = eval(argv[1])if month<1 or month>12: error ("Month not within 1--12.")#Get yearif argc==2: year = localtime(time())[0]else:if len(argv[2]) != 4: error ("Year must be 4 digits.")year = eval(argv[2])if year<1900 or year>= 1900+yearsCoded or (year==1900 and month==1):error ("Year must be within %d--%d, excluding 1900/1."% (1900, 1900 + yearsCoded-1) )return year-1900, month-1year, month = checkArgv(argv)calcAllLunarYearsInfo()outputCalendar(year, month)这个也有问题(1989年8⽉的数据转换成农历就有问题)看了好⼏个程序,发现实现这个并不需要什么NB的算法(好像也不存在这样的算法)可以直接实现阳历转为阴历的,都是记录了⼀堆阴历的数据,然后根据和基本时间来算相差⼏天来计算的,所有阴历数据的正确性决定了这个程序的正确性。

单片机万年历程序代码

单片机万年历程序代码

单片机万年历程序代码以下是一个示例单片机万年历的程序代码:```c#include <reg51.h>typedef unsigned char uchar;typedef unsigned int uint;sbit K1 = P2^0; // 显示年份sbit K2 = P2^1; // 显示月份sbit K3 = P2^2; // 显示日期uchar code year_tab[] = {31,28,31,30,31,30,31,31,30,31,30,31}; uchar code week_tab[] = {0x06,0x07,0x01,0x02,0x03,0x04,0x05}; uchar year, month, day, week;void delay(uint ms){uint i, j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}uchar getKey(){if(K1==0) {delay(5);if(K1==0)return 1;while(!K1);}if(K2==0) {delay(5);if(K2==0)return 2;while(!K2);}if(K3==0) {delay(5);if(K3==0)return 3;while(!K3);}return 0;}void display(uchar num) {P0 = num;delay(1);P0 = 0x00;}void init(){TMOD=0x01;TH0=0xFC;TL0=0x67;EA=1;ET0=1;TR0=1;}void main(){init();while(1) {uchar key = getKey();if(key == 1) {year++;if(year == 100)year = 0;}else if(key == 2) {month++;if(month == 13)month = 1;}else if(key == 3) {day++;if(day > year_tab[month-1]) { day = 1;}}display(year / 10);display(year % 10);display(month / 10);display(month % 10);display(day / 10);display(day % 10);display(week);}}void timer0() interrupt 1{TH0=0xFC;TL0=0x67;week++;if(week == 7)week = 0;}```该代码的主要思路是通过外部三个按键模拟年、月和日的调节,通过一个定时器不断更新星期的计数,然后将年、月、日和星期分别在数码管上显示出来。

万年历代码c语言

万年历代码c语言

万年历代码c语言万年历是一种实用的日历工具,它可以根据年、月、日来显示当天的日期信息,并可以切换到其他日期来查询对应的日期信息。

在编写万年历的代码时,我们需要考虑输入的年份是否为闰年、每个月的天数、以及每个月第一天是星期几等等。

以下是一份使用C语言编写万年历的参考代码:```c#include <stdio.h>// 判断是否为闰年int isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); }// 获取某年某月的天数int getMonthDays(int year, int month) {int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && isLeapYear(year)) {return 29;}return days[month - 1];}// 获取某年某月第一天是星期几int getFirstDayOfWeek(int year, int month) {int day = 1;for (int i = 1800; i < year; i++) {if (isLeapYear(i)) {day = (day + 366) % 7;} else {day = (day + 365) % 7;}}for (int i = 1; i < month; i++) {day = (day + getMonthDays(year, i)) % 7;}return day;}int main() {int year, month;printf("请输入年份:");scanf("%d", &year);printf("请输入月份:");scanf("%d", &month);// 判断输入是否合法if (year < 1800 || month < 1 || month > 12) {printf("输入的年份或月份不合法!\n");return 0;}// 获取某年某月的天数和第一天是星期几int days = getMonthDays(year, month);int firstDayOfWeek = getFirstDayOfWeek(year, month); // 打印万年历printf("日一二三四五六\n");for (int i = 0; i < firstDayOfWeek; i++) {printf(" ");}for (int i = 1; i <= days; i++) {printf("%2d ", i);if ((firstDayOfWeek + i) % 7 == 0) {printf("\n");}}printf("\n");return 0;}```以上代码实现了一个简单的万年历功能,在控制台输出给定年份和月份的月历。

linux获取年份

linux获取年份

linux获取年份Linux是一种开源的操作系统,被广泛应用于各个领域。

在Linux 中,获取年份是一项常见的操作,可以通过不同的方法来实现。

在本文中,将介绍几种常用的Linux命令和技巧,帮助读者快速获取当前的年份。

一、使用date命令获取年份在Linux中,date命令用于显示或设置系统的日期和时间。

要获取当前的年份,可以使用date命令的+%Y选项。

下面是一个示例:```$ date +%Y```该命令将输出当前的年份,如2022。

二、使用cal命令获取年份cal命令用于显示日历。

如果只想显示当前的年份,可以使用cal 命令的年份选项,如下所示:```$ cal -y```该命令将输出当前的年份的日历,如下所示:```2022January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We ThFr Sa1 12345 1 2 34 52 3 4 5 6 7 8 6 7 8 9 10 11 12 6 7 8 9 1011 129 10 11 12 13 14 15 13 14 15 16 17 18 19 13 14 15 16 1718 1916 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 2425 2623 24 25 26 27 28 29 27 28 27 28 29 30 31 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We ThFr Sa1 2 1 2 3 4 5 6 7 1 23 43 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 910 1110 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 1617 1817 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 2324 2524 25 26 27 28 29 30 29 30 31 26 27 28 29 30July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We ThFr Sa1 2 1 2 3 4 5 6 12 33 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 89 1010 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 1516 1717 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 2223 2424 25 26 27 28 29 30 28 29 30 31 25 26 27 28 293031October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We ThFr Sa1 12345 12 32 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 89 109 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 1516 1716 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 2223 2423 24 25 26 27 28 29 27 28 29 30 25 26 27 28 2930 3130 31 ```三、使用命令行工具获取年份除了使用命令行命令外,还可以使用命令行工具来获取年份。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档