zoukankan      html  css  js  c++  java
  • winfrom阴阳历互相转换

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Globalization;//////引用内置

    namespace WindowsFormsApplication1
    {
        public partial class Form3 : Form
        {

            #region
            private readonly string animals;
            private DateTimePicker lunarPicker, solarPicker;
            private ChineseLunisolarCalendar lunarCalendar;
            #endregion


            public Form3()
            {

                #region
                InitializeComponent();
                animals = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
                lunarCalendar = new ChineseLunisolarCalendar(); // 中国阴阳历。
                lunarPicker = new DateTimePicker();
                lunarPicker.Dock = DockStyle.Top;
                lunarPicker.Format = DateTimePickerFormat.Custom; // 自定义格式。
                lunarPicker.ShowUpDown = true; // 使用数值调节钮控件。
                lunarPicker.ValueChanged += new EventHandler(lunarPicker_ValueChanged);
                this.Controls.Add(lunarPicker);
                solarPicker = new DateTimePicker();
                solarPicker.Dock = DockStyle.Bottom;
                solarPicker.Format = DateTimePickerFormat.Custom; // 自定义格式。
                solarPicker.CustomFormat = "dddd yyyy'年'M'月'd'日'";
                solarPicker.ShowUpDown = true; // 使用数值调节钮控件。
                solarPicker.MaxDate = lunarCalendar.MaxSupportedDateTime;
                solarPicker.ValueChanged += new EventHandler(solarPicker_ValueChanged);
                solarPicker.Value = DateTime.Today;
                this.Controls.Add(solarPicker);
                this.TopMost = true; // 前端显示。
                this.ShowInTaskbar = false; // 在 Windows 任务栏中隐藏窗体。
                this.HelpButton = true; // 显示“帮助”按钮。
                this.MaximizeBox = false; // 隐藏“最大化”按钮。
                this.MinimizeBox = false; // 隐藏“最小化”按钮。
                this.AutoScaleMode = AutoScaleMode.Font; // 根据字体的维度控制缩放。
                this.Font = new Font(Font.Name, 12F);
                this.ClientSize = new Size(192, 52);
                this.AutoSizeMode = AutoSizeMode.GrowAndShrink; // 禁用手动调整大小。
                this.SizeGripStyle = SizeGripStyle.Hide; // 隐藏调整大小手柄。
                this.StartPosition = FormStartPosition.CenterScreen; // 在桌面居中显示。
                #endregion

            }


            #region 计算阳历
            private void lunarPicker_ValueChanged(object sender, EventArgs e)
            {
                DateTime solar = lunarPicker.Value;
                int year = solar.Year;
                int month = solar.Month;
                int day = Math.Min(solar.Day, lunarCalendar.GetDaysInMonth(year, month));
                int leapMonth = lunarCalendar.GetLeapMonth(year);
                if (0 < leapMonth && leapMonth <= month)
                    ++month;
                solarPicker.Value = lunarCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
            }
            #endregion

            #region 计算阴历
            private void solarPicker_ValueChanged(object sender, EventArgs e)
            {
                DateTime solar = solarPicker.Value;
                int year = lunarCalendar.GetYear(solar);
                int month = lunarCalendar.GetMonth(solar);
                int day = lunarCalendar.GetDayOfMonth(solar);
                int leapMonth = lunarCalendar.GetLeapMonth(year);
                if (0 < leapMonth && leapMonth <= month)
                    --month;
                if (month == 2 && day > 28)
                    lunarPicker.CustomFormat = string.Format("{0}年 {1}年 {2}月{3}日", animals[(year - 4) % 12], year, month, day);
                else
                {
                    lunarPicker.CustomFormat = string.Format("{0}'年' yyyy'年'M'月'd'日'", animals[(year - 4) % 12]);
                    lunarPicker.Value = new DateTime(year, month, day);
                }
            }
            #endregion

            #region DesktopBounds
            protected override void OnHelpButtonClicked(System.ComponentModel.CancelEventArgs e)
            {
                base.OnHelpButtonClicked(e);
                e.Cancel = true;
                using (FontDialog fontDialog = new FontDialog())
                {
                    fontDialog.Font = this.Font;
                    fontDialog.ShowEffects = false;
                    if (fontDialog.ShowDialog(this) == DialogResult.OK)
                    {
                        this.Font = fontDialog.Font;
                        int sw = TextRenderer.MeasureText("星期日 0000年00月00日", this.Font).Width;
                        this.ClientSize = new Size(sw + 16, lunarPicker.Height + solarPicker.Height);
                        Size ws = Screen.GetWorkingArea(this).Size - this.Size;
                        this.DesktopLocation = new Point(ws.Width / 2, ws.Height / 2);
                    }
                }
            }
            #endregion
        }

    }

    ===============================================================================================

    方法二:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Globalization;

    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {


            private static ChineseLunisolarCalendar chineseDate = new ChineseLunisolarCalendar();  

            public Form2()
            {
                InitializeComponent();
                ShowYearInfo();
                ShowCurrentYearInfo();
                Console.ReadLine(); 
            }

            /// <summary>
            /// 展示阴历年份信息
            /// </summary>
            public static void ShowYearInfo()
            {
                for (int i = chineseDate.MinSupportedDateTime.Year; i < chineseDate.MaxSupportedDateTime.Year; i++)
                {
                    Console.WriteLine("年份:{0},月份总数:{1},总天数:{2},干支序号:{3}", i, chineseDate.GetMonthsInYear(i), chineseDate.GetDaysInYear(i)
                        , chineseDate.GetSexagenaryYear(new DateTime(i, 3, 1)));
                }
            }

            /// <summary>  
            /// 展示当前年份信息  
            /// </summary>  
            public static void ShowCurrentYearInfo()  
            {  
                int lYear=chineseDate.GetYear(DateTime.Now);  
                int lMonth=chineseDate.GetMonth(DateTime.Now);  
                int lDay=chineseDate.GetDayOfMonth(DateTime.Now);  
                  
                /** GetLeapMonth(int year)方法返回一个1到13之间的数字, 
                 * 比如:1、该年阴历2月有闰月,则返回3 
                 * 如果:2、该年阴历8月有闰月,则返回9 
                 * GetMonth(DateTime dateTime)返回是当前月份,忽略是否闰月 
                 * 比如:1、该年阴历2月有闰月,2月返回2,闰2月返回3 
                 * 如果:2、该年阴历8月有闰月,8月返回8,闰8月返回9 
                 */ 
                int leapMonth = chineseDate.GetLeapMonth(lYear);//获取第几个月是闰月,等于0表示本年无闰月  
                  
                //如果今年有闰月  
                if (leapMonth > 0)  
                {  
                    //闰月数等于当前月份  
                    if (lMonth == leapMonth)  
                    {  
                        Console.WriteLine("今年的阴历日期:{0}年闰{1}月{2}日。", lYear, lMonth - 1, lDay);  
                    }  
                    else if (lMonth > leapMonth)//  
                    {  
                        Console.WriteLine("今年的阴历日期:{0}年{1}月{2}日。", lYear, lMonth - 1, lDay);  
                    }  
                    else 
                    {  
                        Console.WriteLine("今年的阴历日期:{0}年{1}月{2}日。", lYear, lMonth, lDay);  
                    }  
                      
                }  
                else 
                {  
                    Console.WriteLine("今年的阴历日期:{0}年{1}月{2}日。", lYear, lMonth, lDay);  
                }  
                Console.WriteLine("今天的公历日期:" + DateTime.Now.ToString("yyyy-MM-dd"));  
                Console.WriteLine("今年阴历天数:{0},今年{1}闰年", chineseDate.GetDaysInYear(DateTime.Now.Year),(chineseDate.IsLeapYear(DateTime.Now.Year)==true)?"是":"不是");  
                  
                Console.WriteLine("今年农历每月的天数:");//注意:如果有13个数字表示当年有闰月  
                for (int i = 1; i <= chineseDate.GetMonthsInYear(DateTime.Now.Year); i++)  
                {  
                    Console.Write("{0,-5}",chineseDate.GetDaysInMonth(DateTime.Now.Year,i));  
                }  
            }
        }
    }

  • 相关阅读:
    linux常用命令
    设计模式-软件设计原则1-开闭原则
    java连接redis5.0单机版报连接超时错误
    模拟安装redis5.0集群并通过Java代码访问redis集群
    redis安装-单机版
    eclipse异常关了,tomcat如何关
    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component...
    排序算法
    RpcException:No provider available for remote service异常
    3.mysql多表
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2026841.html
Copyright © 2011-2022 走看看