C#处理生日提醒功能,最全面代码。

以下是我经过 一个多星期,摸索出来,考虑的也比较全面的 生日提醒代码,因为生日提醒涉及到 有的是公历,有的农历,还有2月29日 出生,日期处理

总的思路

一.把农历转成公历

二.再分别对待公历生日,农历生日处理。

protected void TongYi()
    {

DataSet MyDataSet = DBUtility.DbHelperSQL.GetDataSet("select * from ERPUser where  DATEDIFF ( DAY , GETDATE() , TongYi )<0    and  ZaiGang=‘在岗‘  ");

for (int j = 0; j < MyDataSet.Tables[0].Rows.Count; j++)
        {

BLL.ERPUser MyModel = new BLL.ERPUser();

MyModel.ID = int.Parse(MyDataSet.Tables[0].Rows[j]["ID"].ToString());

if (MyDataSet.Tables[0].Rows[j]["PanDuan"].ToString() == "公历")
            {
                #region 公历生日

string gonglitongyi = "2014-5-12";
                DateTime dt2 = Convert.ToDateTime(MyDataSet.Tables[0].Rows[j]["BirthDay"].ToString());
                int pox = toResult(MyDataSet.Tables[0].Rows[j]["BirthDay"].ToString());

if (pox <= 0)
                {
                    #region
                    if ((dt2.Month == 2) && (dt2.Day == 29))
                    {

gonglitongyi = DateTime.Now.Year.ToString() + "-" + dt2.Month.ToString() + "-" + "28";

}
                    else
                    {

gonglitongyi = DateTime.Now.Year.ToString() + "-" + dt2.Month.ToString() + "-" + dt2.Day.ToString();

}

#endregion

}
                else
                {

#region
                    if ((dt2.Month == 2) && (dt2.Day == 29))
                    {

gonglitongyi = (Convert.ToInt32(DateTime.Now.Year.ToString()) + 1).ToString() + "-" + dt2.Month.ToString() + "-" + "28";

}
                    else
                    {

gonglitongyi = (Convert.ToInt32(DateTime.Now.Year.ToString()) + 1).ToString() + "-" + dt2.Month.ToString() + "-" + dt2.Day.ToString();

}
                    #endregion

}

MyModel.TongYi = gonglitongyi;
                MyModel.NianDai = DateTime.Now.Year.ToString();

#endregion

}
            else if (MyDataSet.Tables[0].Rows[j]["PanDuan"].ToString() == "农历")
            {
                #region

string riqi = MyDataSet.Tables[0].Rows[j]["NongLi"].ToString();
                string moy = "9-18";
                string[] arr = riqi.Split(‘-‘);
                if (arr.Length.ToString() == "3")
                {

moy = arr[1] + "-" + arr[2];

}
                arr = null;

ChineseLunisolarCalendar ChineseCalendar = new ChineseLunisolarCalendar();
                int niandai = Convert.ToInt32(DateTime.Now.Year.ToString());
                string biaozhun = ChineseCalendar.GetYear(DateTime.Now).ToString();//取农历年
                string vtx2 = biaozhun + "-" + moy.ToString();
                DateTime dt2 = Convert.ToDateTime(vtx2);
                string sss = calendarChineseLunisolarToSolar(dt2).ToString();
                int result = toResult2(sss);
                if (result < 0)
                {

biaozhun = (ChineseCalendar.GetYear(DateTime.Now) + 1).ToString();

}
                else
                {

biaozhun = ChineseCalendar.GetYear(DateTime.Now).ToString(); //取农历年

}
                string vtx3 = biaozhun + "-" + moy.ToString();
                DateTime dt3 = Convert.ToDateTime(vtx3);
                string tongyidate = calendarChineseLunisolarToSolar(dt3).Year.ToString() + "-" + calendarChineseLunisolarToSolar(dt3).Month.ToString() + "-" + calendarChineseLunisolarToSolar(dt3).Day.ToString();
                MyModel.TongYi = tongyidate;
                MyModel.NianDai = DateTime.Now.Year.ToString();

#endregion

}

MyModel.Update2();

}
    }

public int toResult(string d2)
    {
        string joinDate1 = "";

DateTime dt2 = Convert.ToDateTime(d2);

if ((dt2.Month == 2) && (dt2.Day == 29))
        {

joinDate1 = (DateTime.Now.Year.ToString() + "-" + dt2.Month.ToString() + "-" + "28");

}
        else
        {

joinDate1 = (DateTime.Now.Year.ToString() + "-" + dt2.Month.ToString() + "-" + dt2.Day.ToString());

}

DateTime joinDate = Convert.ToDateTime(joinDate1);

TimeSpan ts = DateTime.Now - joinDate;

return ts.Days;
    }

public int toResult2(string d2)
    {
        DateTime joinDate = Convert.ToDateTime(d2);

TimeSpan ts = joinDate - DateTime.Now;

return ts.Days;
    }

/// <summary>
    /// 将  农历(阴历)   转换为   公历(阳历,西历)
    ///    如果传入的参数中的年份是润年,需要另外进行加上润月的天数,简单测试,但没有做过多的测试,不知是否完全正确
    ///
    ///    DateTime dt = Convert.ToDateTime("2010-05-21 00:00:00");
    ///    MessageBox.Show(calendarChineseLunisolarToSolar(dt).ToString());
    ///   
    /// </summary>
    ///
    public static DateTime calendarChineseLunisolarToSolar(DateTime ChineseLunisolarDateTime)
    {
        System.Globalization.ChineseLunisolarCalendar cal = new System.Globalization.ChineseLunisolarCalendar();

if (ChineseLunisolarDateTime.Year < 1902 || ChineseLunisolarDateTime.Year > 2100)
            throw new Exception("只支持1902~2100期间的农历年");

DateTime dt = cal.ToDateTime(ChineseLunisolarDateTime.Year, ChineseLunisolarDateTime.Month, ChineseLunisolarDateTime.Day, 0, 0, 0, 0);

//检测是否含有润月
        int leapMonth = cal.GetLeapMonth(ChineseLunisolarDateTime.Year);

int leapMonthInDays = 0;

if ((leapMonth > 0) & (leapMonth <= ChineseLunisolarDateTime.Month))
        // if (leapMonth > 0 & ChineseLunisolarDateTime.Month > leapMonth)
        {
            //有润月,则读到这个润月里面的天数
            leapMonthInDays = cal.GetDaysInMonth(ChineseLunisolarDateTime.Year, ChineseLunisolarDateTime.Month);
        }

dt = dt.AddDays(leapMonthInDays);

return dt;
    }

时间: 2024-08-29 04:44:13

C#处理生日提醒功能,最全面代码。的相关文章

Python实现农历生日提醒功能

前言: 某天突发奇想,想要实现一个农历生日提醒.这个时候有了如下的大概思路: 获取农历   -->    匹配    -->     提醒 发现实现这个需求最主要的在获取农历这一块,后边两个不是什么巨大挑战.遂查阅一番资料,发现数据库可以实现阳历转阴历功能.在数据库这一块,我是在是小菜,看不懂存储过程.蛋疼!直接放弃改用其他思路.思考了许久,想到可以通过爬虫爬取现成的日历信息,存库再进行匹配.所以,现在思路如下: 爬取农历存库   -->    匹配姓名表    -->     提

生日提醒功能的小功能模块

// 获取员工生日提醒数据 public List<H_Basic> getBirthday(int page, int rows) { List<H_Basic> rtn = new ArrayList<H_Basic>(); int num = (page - 1) * rows; init(); rtn = se.createQuery("from H_Basic where " + "to_char(sysdate,'MM')=to

Ios开发中UILocalNotification实现本地通知实现提醒功能

这两天在做一个日程提醒功能,用到了本地通知的功能,记录相关知识如下: 1.本地通知的定义和使用: 本地通知是UILocalNotification的实例,主要有三类属性: scheduled time,时间周期,用来指定iOS系统发送通知的日期和时间: notification type,通知类型,包括警告信息.动作按钮的标题.应用图标上的badge(数字标记)和播放的声音: 自定义数据,本地通知可以包含一个dictionary类型的本地数据. 对本地通知的数量限制,iOS最多允许最近本地通知数

Chrome桌面提醒功能,兼容新老版本,firefox最新版本也通过

Chrome新版升级api,与w3一致,为了兼容,代码如下: //桌面提醒 function notify(title, content) { if(!title && !content){ title = "桌面提醒"; content = "您看到此条信息桌面提醒设置成功"; } var iconUrl = "/images/send_ok.png"; if (window.webkitNotifications) { //c

iOS开发中UILocalNotification本地通知实现简单的提醒功能

这段时间项目要求做一个类似的闹钟提醒功能,对通知不太熟悉的我,决定先用到xcode自带的本地通知试试,最终成功的实现了功能,特整理分享下. 它的表现特点: app关闭的时候也能接收和显示通知. app处于后台的时候能接收通知也能显示. app处于前台的时候能接收,但不能显示,但是会走应用程序delegate中的方法 具体的创建方法: ->创建一个本地通知对象UILocalNotification ->设置fireDate,AlertBody,AlertAction,soundName,appl

生日提醒

最近写了个阴历生日提醒的东西,用Python写的,大家有兴趣的可以看看.目前只在本机上运行,没有服务器. Data.xlsx为数据,保存的是注册的信息和用户保存的朋友生日. main.py 是给用户使用的,用户通过这个程序注册登录查询生日和保存生日. BirthdayPrompter.py 是放在服务器上的(目前就是放在本机里),每天运行一次,他会检测所以用户及他们保存的所以生日,如果明天有人要生日了会给用户的邮箱发一封邮件提醒. 文件我已经放在我的Github上了,有兴趣的可以看一下.http

Android使用GridView实现日历功能(详细代码)

代码有点多,发个图先: 如果懒得往下看的,可以直接下载源码吧(0分的),最近一直有人要,由于时间太久了,懒得找出来整理,今天又看到有人要,正好没事就整理了一下 http://download.csdn.net/detail/onlyonecoder/6574379 布局文件: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi

[转载]TFS发送邮件提醒功能

第一次使用TFS 2010,发现有Project Alerts功能,就是项目组工程中若有任何改动时,TFS Server会自动发邮件提醒.Microsoft提供的配置方法(http://msdn.microsoft.com/en-us/library/ms400808(VS.80).aspx)中不适合TFS 2010,因此,我提供了以下参考方法: 1.安装SMTP Server 首先,在装有TFS 2010的服务中先安装SMTP服务,我使用的是Windows Server 2008,在Serve

微信上线朋友圈屏蔽提醒功能

你的朋友圈是不是经常被某些人的鸡汤文.装*图充斥着,直接屏蔽不看他的朋友圈也不是良策,现在好了,微信官方上线了朋友圈屏蔽提醒功能,对于朋友圈内发信息过于频繁的用户,,尤其是消息中经常出现美女图片.鸡汤.“卖”等内容,微信官方将会在消息下方出现“若对他的内容不感兴趣,可轻触此处设置权限”的提示. 除了这条提示外,在朋友圈长按用户头像时,会直接出现“设置朋友圈权限”.“举报”.“取消”等选项(苹果和安卓设备的弹出内容略有差异),进一步方便用户随手屏蔽不想看到的内容和用户. 朋友圈屏蔽提醒功能,不仅有