微信平台开发——日历服务

很多人可能用过如下的功能:

我向微信号发个字符,然后后台去解析字符,拆出其中的关键字,然后去数据库查询是否开启此项服务,如果服务开启,则返回给用户调用此服务的结果。

最近两天开始做的服务有,天气查询,日历,快递,火车,黄金。。。等六个服务做成接口,今天要分析的是这里面唯一没有调用外部API接口的服务。

首先,我们要写好一个计算农历的方法,:

#region 获取农历方法

        ///<summary>
        /// 实例化一个 ChineseLunisolarCalendar
        ///</summary>
        private static ChineseLunisolarCalendar ChineseCalendar = new ChineseLunisolarCalendar();

        ///<summary>
        /// 十天干
        ///</summary>
        private static string[] tg = { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };

        ///<summary>
        /// 十二地支
        ///</summary>
        private static string[] dz = { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };

        ///<summary>
        /// 十二生肖
        ///</summary>
        private static string[] sx = { "鼠", "牛", "虎", "免", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };

        ///<summary>
        /// 返回农历天干地支年
        ///</summary>
        ///<param name="year">农历年</param>
        ///<return s></return s>
        public static string GetLunisolarYear(int year)
        {
            if (year > 3)
            {
                int tgIndex = (year - 4) % 10;
                int dzIndex = (year - 4) % 12;

                return string.Concat(tg[tgIndex], dz[dzIndex], "[", sx[dzIndex], "]");
            }

            throw new ArgumentOutOfRangeException("无效的年份!");
        }

        ///<summary>
        /// 农历月
        ///</summary>

        ///<return s></return s>
        private static string[] months = { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二(腊)" };

        ///<summary>
        /// 农历日
        ///</summary>
        private static string[] days1 = { "初", "十", "廿", "三" };
        ///<summary>
        /// 农历日
        ///</summary>
        private static string[] days = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };

        ///<summary>
        /// 返回农历月
        ///</summary>
        ///<param name="month">月份</param>
        ///<return s></return s>
        public static string GetLunisolarMonth(int month)
        {
            if (month < 13 && month > 0)
            {
                return months[month - 1];
            }

            throw new ArgumentOutOfRangeException("无效的月份!");
        }

        ///<summary>
        /// 返回农历日
        ///</summary>
        ///<param name="day">天</param>
        ///<return s></return s>
        public static string GetLunisolarDay(int day)
        {
            if (day > 0 && day < 32)
            {
                if (day != 20 && day != 30)
                {
                    return string.Concat(days1[(day - 1) / 10], days[(day - 1) % 10]);
                }
                else
                {
                    return string.Concat(days[(day - 1) / 10], days1[1]);
                }
            }

            throw new ArgumentOutOfRangeException("无效的日!");
        }

        ///<summary>
        /// 根据公历获取农历日期
        ///</summary>
        ///<param name="datetime">公历日期</param>
        ///<return s></return s>
        public static string GetChineseDateTime(DateTime datetime)
        {
            int year = ChineseCalendar.GetYear(datetime);
            int month = ChineseCalendar.GetMonth(datetime);
            int day = ChineseCalendar.GetDayOfMonth(datetime);
            //获取闰月, 0 则表示没有闰月
            int leapMonth = ChineseCalendar.GetLeapMonth(year);

            bool isleap = false;

            if (leapMonth > 0)
            {
                if (leapMonth == month)
                {
                    //闰月
                    isleap = true;
                    month--;
                }
                else if (month > leapMonth)
                {
                    month--;
                }
            }

            return string.Concat(GetLunisolarYear(year), "年", isleap ? "闰" : string.Empty, GetLunisolarMonth(month), "月", GetLunisolarDay(day));
        }

        #endregion

接着,拼接好返回的字符:

  Console.Write(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "\r\n" + "农历为:"+GetChineseDateTime(DateTime.Now));

为了测试外部调用的情况,我们可以这样,一个ajax过来,然后提交到handler里面,handler调用这些接口来测试下。

需要注意的是,

1,拼接好的字符串里面的换行符最好是HTML标签中的<br/>,不使用\n;

2,调用百度等大型开发平台的API接口的时候,对于返回的JSON,处理JSON转对象的时候,要注意JSON里面数组都要变成LIST,然后再调用自己构造的泛型方法去转换。

下面分享一些私人手藏的接口:

http://api.ajaxsns.com/

http://www.djdkx.com/open/randxml

http://api.map.baidu.com/telematics/v3/weather?location=%E5%8C%97%E4%BA%AC&output=json&ak=这里填写自己的AK

http://www.twototwo.cn/train/QueryTrainScheduleByNumber.aspx

http://www.chepiao100.com/my/doc/checi.html

http://www.haoservice.com/apilist/

网上也有很多付费的接口,另外,今天做黄金查询的时候,发现了个聚合数据也不错哟~

时间: 2024-08-26 10:09:39

微信平台开发——日历服务的相关文章

微信平台开发之利用本地环境加新花生壳解释做测试环境

准备工作: 1.搭建本地PHP开发环境. 2.注册并安装新花生壳. 3.注册微信公众平台帐号. 第一步:搭建本地PHP开发环境,案例使用wamp集成环境. 下载并安装集成环境确保集成环境正常运行. 第二步:注册并安装新花生壳,过程(略). 具体教程可查看http://www.oray.com/ 第三步:对开发环境做解释. 登陆花生壳做解释: 开放wamp的外部访问:教程http://hi.baidu.com/aubbll/item/8bd5a52253d3ecd7a517b685 至此,外网就可

基于ThinkPHP3的微信平台开发_1

微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的第三方管理平台.功能全部开发完毕后,号主通过注册.填写微信公众号配置(在腾讯的平台上设置,如Token.EncodingAESKey等).填写本平台配置(配置Token.EncodingAESKey等),即可实现微信公众平台大部分业务功能(可能受微信公众号类型限制). 逻辑划分: 本平台基于ThinkPHP框

微信平台开发教程

转自:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 关键字:微信公众平台开发作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 了解数据收发原理及消息格式 开发实现微信天气预报功能 第

微信平台开发1--开发者模式基本配置

网上有很多教程,这里作为本人学习笔记记录.网上教程大多是PHP版本,由于我比较喜欢Java,这里用Java进行配置. 基本步骤参考官网 填写好token和URL之后下面要求验证服务器地址有效性 下面是代码 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.

微信公众平台开发问答-20161215

================================================================ 消息分组:QQ群 518924126================================================================消息对象:微信平台开发有问必答群================================================================ 2016-11-16 18:15:33 [师

微信公众平台开发入门教程(PHP从入门到精通)

微信,我的入门之路 主要针对大学生,像我一样曾经迷惘的人 务必看第三章个人体会,会很有用 这一个月的学习经验分享 最后第三章我学习php的入门经验 本人是一个大三的学生,眼看明年就要毕业了.要学点什么?就接触了微信公众号.下面是我开学到现在一个月的学习成果,也是我的入门的经验了吧.(以前我是学习硬件的,这一个月也是摸索到现在.下面是我的入门之路,及遇到问题,我解决问题的经验和技巧吧,希望能帮到那些像我一样的人,也希望和那些人一起成长.)开始吧: 在这篇微信公众平台开发教程中,我们假定你已经有了P

微信第三方开发行业解决方案

服饰 微信订购:随时随地通过手机购买服装: 手机支付:支持支付宝/银联信用卡.储蓄卡: 广告促销:商品广告促销策略管理: 分享推广:朋友圈分享推广商品: 高清商品:支持滑屏高清商品图片展示: 商品评论:已购买会员对商品的评价. 餐饮 会员系统:关注微信公众平台即生成会员卡: 会员折扣:支持会员自动升级与分组折扣: 天天特价:每天展示一周内的特价商品: 在线预订:支持在线预订包厢服务: 电子菜牌:了解餐厅所有商品,推荐热卖等: LBS 位置:发送位置,自动获取最近餐厅. 新闻媒体 新闻对接:支持对

微信公众平台开发教程 订阅号与服务号的区别

为了消除大家对订阅号与服务号的疑问,特总结如下: 功能点 介绍 订阅号 服务号 注册 注册账号 个人信息 个人信息和企业相关信息 展示 在手机端展现方式 显示在订阅号文件夹中 跟微信好友一样显示 收发消息 接受和发送消息,包括: 1 文本消息 2 图片消息 3 语音消息 4 视频消息 5 音乐消息 6 图文消息 有 有 事件响应 获取关注.取消关注.自定义菜单点击事件,并产生响应 有(自定义年菜单点击事件,取决于自定义菜单权限) 有 群发消息 向全部客户或指定客户发送消息 每天一条 每月一条 自

微信公共服务平台开发(.Net的实现)1 认证“成为开发者”

http://www.cnblogs.com/freeliver54/p/3725979.html http://www.it165.net/pro/html/201402/9459.html 这些代码也就开始认证的时候用一次,以后就不用了: view sourceprint? 01.const string Token = "XXXXX";//你的token 02.protected void Page_Load(object sender, EventArgs e) 03.{ 04