一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于获取农历的api 获取农历日期的文章,本文对文章获取农历的api 获取农历日期好好的分析和解答,希望你能喜欢,只有你喜欢的内容存在,只有你来光临,我们才能继续前行。
这是网上的例子,你仔细看看
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
/// <summary>
/// chinaDate 的摘要说明
/// </summary>
public class chinaDate
{
public string cDate()
{
ChineseLunisolarCalendar l = new ChineseLunisolarCalendar();
DateTime dt = DateTime.Today; //转换当日的日期
//dt = new DateTime(2023, 1,29);//农历2023年大年初一(测试用),也可指定日期转换
string[] aMonth ={"","银简正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "腊月", "腊月" };
//a10表示日期的十位!
string[] a10 ={ "初", "十", "廿", "卅" };
string[] aDigi ={ "O", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
string sYear = "", sYearArab = "", sMonth = "", sDay = "", sDay10 = "", sDay1 = "", sLuniSolarDate = "";
int iYear, iMonth, iDay;
iYear = l.GetYear(dt);
iMonth = l.GetMonth(dt);
iDay = l.GetDayOfMonth(dt);
//Format Year
sYearArab = iYear.ToString();
for (int i = 0; i < sYearArab.Length; i++)
{
sYear += aDigi[Convert.ToInt16(sYearArab.Substring(i, 1))];
}
//Format Month
int iLeapMonth = l.GetLeapMonth(iYear); //获取闰月
if (iLeapMonth > 0 && iMonth<=iLeapMonth)
{
//for (int i = iLeapMonth + 1; i < 13; i++) aMonth[i] = aMonth[i - 1];
aMonth[iLeapMonth] = "闰" + aMonth[iLeapMonth-1];
sMonth = aMonth[l.GetMonth(dt)];
}
else if (iLeapMonth > 0 && iMonth > iLeapMonth)
{
sMonth = aMonth[l.GetMonth(dt) - 1];
}
else
{
sMonth = aMonth[l.GetMonth(dt)];
}
返搏简//Format Day
sDay10 = a10[iDay / 10];
sDay1 = aDigi[(iDay % 10)];
sDay = sDay10 + sDay1;
if (iDay == 10) sDay = "初十";
if (iDay == 20) sDay = "二十";
if (iDay == 30) sDay = "三十";
//Format Lunar Date
//sLuniSolarDate = dt.Year+"年"+dt.Month+"月"+dt.Day+"日 "+Weeks(dt.DayOfWeek.ToString())+"漏裤 农历" + sYear + "年" + sMonth + sDay;
sLuniSolarDate =" 农历" + sMonth + sDay;
return sLuniSolarDate;
}
private string Weeks(string Weeken)
{
switch (Weeken)
{
case "Monday":
return "星期一";
break;
case "Tuesday":
return "星期二";
break;
case "Wednesday":
return "星期三";
break;
case "Thursday":
return "星期四";
break;
case "Friday":
return "星期五";
break;
case "Saturday":
return "星期六";
break;
case "Sunday":
return "星期日";
break;
default:
return " ";
}
}
}
二、第二步
chinaDate s = new chinaDate();
Label1.Text = DateTime.Now.ToShortDateString() + " " + CaculateWeekDay(DateTime.Now.DayOfWeek.ToString()) + " " + s.cDate();
三、第三步
#region 得到今天是星期几
protected string CaculateWeekDay(string week)
{
string weekstr = "";
switch (week)
{
case "Monday": weekstr = "星期一"; break;
case "Tuesday": weekstr = "星期二"; break;
case "Wednesday": weekstr = "星期三"; break;
case "Thursday": weekstr = "星期四"; break;
case "Friday": weekstr = "星期五"; break;
case "Saturday": weekstr = "星期六"; break;
case "Sunday": weekstr = "星期日"; break;
}
return weekstr;
}
使用java开源工具httpClient及jsoup抓取解析网页数据来源:iteye,原文
公历时间:2023年04月11日星期一
农历时间:猴年三月初五
天干地支:丙申年壬辰月癸亥日
宜:求子祈福开光祭祀安床
忌:玉堂(黄道)危日,忌出行
主要包括公历/农历日期,以及忌宜信息的等。但是手里并没有现成的数据可供使用,怎么办呢?革命前辈曾经说过,没有枪,没有炮,敌(wang)人(luo)给我们造!网络上有很多现成的在线万年历应用可供使用,虽然没有现成接口,但是我们可以伸出手来,自己去拿。也就是所谓的数据抓取。
HttpClient是ApacheJakartaCommon下的子项目,用来提供高效的、最新的、功能丰派樱富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如ApacheJakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用尘桥丛了HttpClient。
1.创建HttpClient对象。
2.创建请求方法的消扒实例,并指定请求URL。
3.调用HttpClient对象的execute(HttpUriRequestrequest)发送请求,该方法返回一个HttpResponse。
4.调用HttpResponse相关方法获取相应内容。
5.释放连接。
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
需要更多信息可以参见官网下载地址
httpClient:http://hc.apache.org/httpcomponents-client-5.0.x/index.html
jsoup:http://jsoup.org/
接下来我们直接上代码,这里我们抓取2345在线万年历的数据http://tools.2345.com/rili.htm
首先我们定义一个实体类Almanac来存储黄历数据
Almanac.java1packagecom.likx.picker.util.bean;2
3/**4
*万年历工具实体类5
*
6
*@author溯源blog7
*2023年4月11日8
*/9publicclassAlmanac{10
privateStringsolar;
/*阳历e.g.2023年4月11日星期一*/11
privateStringlunar;
/*阴历e.g.猴年三月初五*/12
privateStringchineseAra;
/*天干地支纪年法e.g.丙申年壬辰月癸亥日*/13
privateStringshould;
/*宜e.g.求子祈福开光祭祀安床*/14
privateStringavoid;
/*忌e.g.玉堂(黄道)危日,忌出行*/1516
publicStringgetSolar(){17
returnsolar;18
}1920
publicvoidsetSolar(Stringdate){21
this.solar=date;22
}2324
publicStringgetLunar(){25
returnlunar;26
}2728
publicvoidsetLunar(Stringlunar){29
this.lunar=lunar;30
}3132
publicStringgetChineseAra(){33
returnchineseAra;34
}3536
publicvoidsetChineseAra(StringchineseAra){37
this.chineseAra=chineseAra;38
}3940
publicStringgetAvoid(){41
returnavoid;42
}4344
publicvoidsetAvoid(Stringavoid){45
this.avoid=avoid;46
}4748
publicStringgetShould(){49
returnshould;50
}5152
publicvoidsetShould(Stringshould){53
this.should=should;54
}5556
publicAlmanac(Stringsolar,Stringlunar,StringchineseAra,Stringshould,57
Stringavoid){58
this.solar=solar;59
this.lunar=lunar;60
this.chineseAra=chineseAra;61
this.should=should;62
this.avoid=avoid;63
}64}
然后是抓取解析的主程序,写程序之前需要在官网下载需要的jar包
AlmanacUtil.javapackagecom.likx.picker.util;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importorg.apache.http.HttpEntity;importorg.apache.http.ParseException;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.util.EntityUtils;importorg.jsoup.Jsoup;importorg.jsoup.nodes.Document;importorg.jsoup.nodes.Element;importorg.jsoup.select.Elements;/***<STRONG>类描述</STRONG>:
2345万年历信息爬取工具<p>*
*@version1.0<p>*@author溯源blog*
*<STRONG>创建时间</STRONG>:2023年4月11日下午14:15:44<p>*<STRONG>修改历史</STRONG>:<p>*<pre>*修改人
修改时间
修改内容*---------------
-------------------
-----------------------------------*</pre>*/publicclassAlmanacUtil{
/**
*单例工具类
*/
privateAlmanacUtil(){
}
/**
*获取万年历信息
*@return
*/
publicstaticAlmanacgetAlmanac(){
Stringurl="http://tools.2345.com/rili.htm";
Stringhtml=pickData(url);
Almanacalmanac=analyzeHTMLByString(html);
returnalmanac;
}
/*
*爬取网页信息
*/
privatestaticStringpickData(Stringurl){
CloseableHttpClienthttpclient=HttpClients.createDefault();
try{
HttpGethttpget=newHttpGet(url);
CloseableHttpResponseresponse=httpclient.execute(httpget);
try{
//获取响应实体
HttpEntityentity=response.getEntity();
//打印响应状态
if(entity!=null){
returnEntityUtils.toString(entity);
}
}finally{
response.close();
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(ParseExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
//关闭连接,释放资源
try{
httpclient.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
returnnull;
}
/*
*使用jsoup解析网页信息
*/
privatestaticAlmanacanalyzeHTMLByString(Stringhtml){
StringsolarDate,lunarDate,chineseAra,should,avoid="";
Documentdocument=Jsoup.parse(html);
//公历时间
solarDate=getSolarDate();
//农历时间
ElementeLunarDate=document.getElementById("info_nong");
lunarDate=eLunarDate.child(0).html().substring(1,3)+eLunarDate.html().substring(11);
//天干地支纪年法
chineseAra=eChineseAra.text().toString();
//宜
should=getSuggestion(document,"yi");
//忌
avoid=getSuggestion(document,"ji");
Almanacalmanac=newAlmanac(solarDate,lunarDate,chineseAra,should,avoid);
returnalmanac;
}
/*
*获取忌/宜
*/
privatestaticStringgetSuggestion(Documentdoc,Stringid){
Elementelement=doc.getElementById(id);
Elementselements=element.getElementsByTag("a");
StringBuffersb=newStringBuffer();
for(Elemente:elements){
sb.append(e.text()+"");
}
returnsb.toString();
}
/*
*获取公历时间,用yyyy年MM月dd日EEEE格式表示。
*@returnyyyy年MM月dd日EEEE
*/
privatestaticStringgetSolarDate(){
Calendarcalendar=Calendar.getInstance();
DatesolarDate=calendar.getTime();
SimpleDateFormatformatter=newSimpleDateFormat("yyyy年MM月dd日EEEE");
returnformatter.format(solarDate);
}}
为了简单明了我把抓取解析抽象成了几个独立的方法,
然后下面是一个测试类简单测试下效果:AlmanacUtilTest.javapackagecom.likx.picker.util.test;publicclassAlmanacUtilTest{
publicstaticvoidmain(Stringargs[]){
Almanacalmanac=AlmanacUtil.getAlmanac();
System.out.println("公历时间:"+almanac.getSolar());
System.out.println("农历时间:"+almanac.getLunar());
System.out.println("天干地支:"+almanac.getChineseAra());
System.out.println("宜:"+almanac.getShould());
System.out.println("忌:"+almanac.getAvoid());
}}
集成到实际项目中效果是这样的:
另外最近博客一直没怎么更新,因为最近考虑到技术氛围的原因,离开了对日外包行业,前往一家互联网公司就职。说一下最近的感受,那就是一个程序员最核心的竞争力不是学会了多少框架,掌握多少种工具(当然这些对于程序员也不可或缺),而是扎实的基础以及快速学习的能力,比如今天这个项目,从对httpClient,jsoup工具一无所知到编写出Demo代码总计大概1个多小时,在之前对于我来说是不可想象的,在技术氛围浓厚的地方快速get技能的感觉,非常好。
当然本例只是一个非常浅显的小例子,网页上内容也很容易抓取,httpClient及jsoup工具更多强大的地方没有体现到,比如httpClient不仅可以发送get请求,而且可以发送post请求,提交表单,传送文件,还比如jsoup最强大的地方在于它支持仿jquery的选择器。本例仅仅使用了最简单的document.getElementById()匹配元素,实际上jsoup的选择器异常强大,可以说它就是java版的jquery,比如这样:Elementslinks=doc.select("a[href]");//awithhrefElementspngs=doc.select("img[src$=.jpg]");
//imgwithsrcending.jpgElementmasthead=doc.select("div.masthead").first();
//divwithclass=mastheadElementsresultLinks=doc.select("h3.r>a");//directaafterh3
以上内容是小编精心整理的关于获取农历的api 获取农历日期的精彩内容,好的文章需要你的分享,喜欢获取农历的api 获取农历日期这篇精彩文章的,请您经常光顾吧!
下一篇:更多运程
本文标题:获取农历的api 获取农历日期
本文链接:http://m.shengxiao88.com/article/165663.html
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于获取农历的api 获取农历日期的...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于八月份农历有三十吗 八月份农...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历五月的蛇男命运如何 农历...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于盐城8月10日晚报评述文章 盐城...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历7月龙的命运怎么样 农历7...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历出生算命测试 1969年9月24...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历一月是什么星座的人 农历...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于水产上用戊二醛消毒吗有毒吗 ...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于11月1日农历是多少号 11月1日...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历4月23是什么星座 农历4月2...