因为要用到一个 算干支的函数
但在网上找了好长时间,没有发现算的正确的(按春节划分如20070217丙戌-20070218则为丁亥)
所以就自写了一个,夜深了,有的地方就草草写了,有错请回复提出
注:
用的XML数据库,有兴趣的朋友可以将之转为其它数据库
如果大家需要的话我可以把文件打个包。
-----邹健
====================================================
后注:愿来的函数没做时间合法性判断,又重新修正更改了
因为我用的是ASP.net所以要调用的XML文件名直接写在了web.config的appSettings
代码如下
目录结构
/App_code/strcl.vb本类库文件
|
/xml/AnimalSign.xml 十二生肖及地支文件
| Date.xml 1900-2100春节时间
| SkyTree.xml 天干列表
|
/web.config 网站配置文件
本文将按以下顺序给出代码
datecl.vb
web.config
Date.xml
AnimalSign.xml
SkyTree.xml
=====================================datecl.vb=================================
Imports Microsoft.VisualBasic
Public Class Datecl
Public Enum SkyTreeText
天干 = 0
地支 = 1
End Enum
Shared Function ftime(ByRef d As DateTime) As String
If DateDiff(DateInterval.Day, d, Now()) >= 1 Then
Return Format(d, "MM-dd")
Else
Return Format(d, "HH:mm")
End If
End Function
Overloads Shared Function SkyTree(ByRef dat As DateTime, ByRef i As SkyTreeText) As Byte
'得到干支序号
Dim Dom As New System.Xml.XmlDocument
Dom.Load(My.Request.MapPath("/") & ConfigurationManager.AppSettings("AnimalSignDate"))
Dim Node As System.Xml.XmlNode
Dim y As Int16 = Int16.Parse(Year(dat))
Dim m As Byte = Byte.Parse(Month(dat))
Dim d As Byte = Byte.Parse(Day(dat))
Node = Dom.SelectSingleNode("//item[@year=" & y & "]")
Dim start As Int16
Dim n As Byte
Dim result As Byte
If i = 1 Then
start = 1901
n = 12
Else
start = 1905
n = 10
End If
result = ((y - start) Mod n) + 2
result = IIf(result <= 0, result + n, result)
If Byte.Parse(Node.Attributes("month").InnerXml) > m Then result = result - 1
If Byte.Parse(Node.Attributes("month").InnerXml) = m And Byte.Parse(Node.Attributes("day").InnerXml) > d Then result = result - 1
result = IIf(result = 0, n, result)
result = IIf(result = n + 1, 1, result)
Return result
'本最多用时16MS一般1MS内可以完成
End Function
Overloads Shared Function SkyTree(ByRef dats As String, ByRef i As SkyTreeText) As Byte '得到干支序号
If Not IsDate(dats) Then Return 0
Return SkyTree(DateTime.Parse(dats), i)
End Function
Shared Function XmlItemName(ByRef Xpath As String, ByRef name As String, ByRef xmlfilename As String) As String '通用读取XML
Dim Dom As New System.Xml.XmlDocument
Dom.Load(My.Request.MapPath("/") & ConfigurationManager.AppSettings(xmlfilename))
Dim Node As System.Xml.XmlNode
Node = Dom.SelectSingleNode(Xpath)
Return Node.Attributes(name).InnerXml
End Function
Overloads Shared Function AnimalSignName(ByRef Num As Byte) As String '返回生肖名
Return XmlItemName("//item[@id=" & Num.ToString & "]", "name", "AnimalSign")
End Function
Overloads Shared Function AnimalSignName(ByRef dat As DateTime) As String '返回生肖名
Return AnimalSignName(SkyTree(dat, SkyTreeText.地支))
End Function
Overloads Shared Function AnimalSignName(ByRef dats As String) As String '返回生肖名
If Not IsDate(dats) Then Return ""
Return AnimalSignName(SkyTree(DateTime.Parse(dats), SkyTreeText.地支))
End Function
Overloads Shared Function TreeName(ByRef dat As DateTime) As String '返回为地支名
Return XmlItemName("//item[@id=" & SkyTree(dat, SkyTreeText.地支) & "]", "tree", "AnimalSign")
End Function
Overloads Shared Function TreeName(ByRef dats As String) As String '返回为地支名
If Not IsDate(dats) Then Return ""
Return TreeName(DateTime.Parse(dats))
End Function
Overloads Shared Function SkyName(ByRef dat As DateTime) As String '返回天干名
Return XmlItemName("//item[@id=" & SkyTree(dat, SkyTreeText.天干).ToString & "]", "tree", "SkyTree")
End Function
Overloads Shared Function SkyName(ByRef dats As String) As String '返回天干名
If Not IsDate(dats) Then Return ""
Return SkyName(DateTime.Parse(dats))
End Function
Overloads Shared Function SkyTreeName(ByRef dat As DateTime) As String '返回天干地支
Return SkyName(dat) & TreeName(dat)
End Function
Overloads Shared Function SkyTreeName(ByRef dats As String) As String '返回天干地支
Return SkyName(dats) & TreeName(dats)
End Function
Overloads Shared Function StarSignName(ByRef dats As String) As String
Return StarSignName(StarSign(dats))
End Function
Overloads Shared Function StarSignName(ByRef dat As DateTime) As String
Return StarSignName(StarSign(dat))
End Function
Overloads Shared Function StarSignName(ByRef Num As Byte) As String
Return XmlItemName("/root/item[@id=" & Num.ToString & "]", "name", "StarSign")
End Function
Shared Function StarSign(ByRef dats As String) As Byte
If Not IsDate(dats) Then Return 0
Return StarSign(DateTime.Parse(dats))
End Function
Shared Function StarSign(ByRef dat As DateTime) As Byte
If Not IsDate(dat) Then Return 0
Dim m As Byte = Byte.Parse(Month(dat))
Dim d As Byte = Byte.Parse(Day(dat))
Dim y As Int16 = 2007
Dim temp As DateTime = DateTime.Parse(m & "/" & d & "/2007")
Select Case temp
Case #3/21/2007# To #4/19/2007#
StarSign = 1
Case #4/20/2007# To #5/20/2007#
StarSign = 2
Case #5/21/2007# To #6/21/2007#
StarSign = 3
Case #6/22/2007# To #7/22/2007#
StarSign = 4
Case #7/23/2007# To #8/22/2007#
StarSign = 5
Case #8/23/2007# To #9/22/2007#
StarSign = 6
Case #9/23/2007# To #10/23/2007#
StarSign = 7
Case #10/24/2007# To #11/21/2007#
StarSign = 8
Case #11/22/2007# To #12/21/2007#
StarSign = 9
Case #12/22/2007# To #12/31/2007#
StarSign = 10
Case #1/1/2007# To #1/19/2007#
StarSign = 10
Case #1/20/2007# To #2/18/2007#
StarSign = 11
Case #2/19/2007# To #3/20/2007#
StarSign = 12
Case Else
StarSign = 0
End Select
Return StarSign
End Function
End Class
==============web.config中加以下结点
<appSettings>
<add key="AnimalSignDate" value="/Xml/Date.xml"/>
<add key="AnimalSign" value="/Xml/AnimalSign.xml"/>
<add key="StarSign" value="/Xml/StarSign.xml"/>
<add key="SkyTree" value="/Xml/SkyTree.xml"/>
</appSettings> ==============Date.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item month="1" day="31" year="1900" />
<item month="2" day="19" year="1901" />
<item month="2" day="8" year="1902" />
<item month="1" day="29" year="1903" />
<item month="2" day="16" year="1904" />
<item month="2" day="4" year="1905" />
<item month="1" day="25" year="1906" />
<item month="2" day="13" year="1907" />
<item month="2" day="2" year="1908" />
<item month="1" day="22" year="1909" />
<item month="2" day="10" year="1910" />
<item month="1" day="30" year="1911" />
<item month="2" day="18" year="1912" />
<item month="2" day="6" year="1913" />
<item month="1" day="26" year="1914" />
<item month="2" day="14" year="1915" />
<item month="2" day="4" year="1916" />
<item month="1" day="23" year="1917" />
<item month="2" day="11" year="1918" />
<item month="2" day="1" year="1919" />
<item month="2" day="20" year="1920" />
<item month="2" day="8" year="1921" />
<item month="1" day="28" year="1922" />
<item month="2" day="16" year="1923" />
<item month="2" day="5" year="1924" />
<item month="1" day="24" year="1925" />
<item month="2" day="13" year="1926" />
<item month="2" day="2" year="1927" />
<item month="1" day="23" year="1928" />
<item month="2" day="10" year="1929" />
<item month="1" day="30" year="1930" />
<item month="2" day="17" year="1931" />
<item month="2" day="6" year="1932" />
<item month="1" day="26" year="1933" />
<item month="2" day="14" year="1934" />
<item month="2" day="4" year="1935" />
<item month="1" day="24" year="1936" />
<item month="2" day="11" year="1937" />
<item month="1" day="31" year="1938" />
<item month="2" day="19" year="1939" />
<item month="2" day="8" year="1940" />
<item month="1" day="27" year="1941" />
<item month="2" day="15" year="1942" />
<item month="2" day="5" year="1943" />
<item month="1" day="25" year="1944" />
<item month="2" day="13" year="1945" />
<item month="2" day="2" year="1946" />
<item month="1" day="22" year="1947" />
<item month="2" day="10" year="1948" />
<item month="1" day="29" year="1949" />
<item month="2" day="17" year="1950" />
<item month="2" day="6" year="1951" />
<item month="1" day="27" year="1952" />
<item month="2" day="14" year="1953" />
<item month="2" day="3" year="1954" />
<item month="1" day="24" year="1955" />
<item month="2" day="12" year="1956" />
<item month="1" day="31" year="1957" />
<item month="2" day="18" year="1958" />
<item month="2" day="8" year="1959" />
<item month="1" day="28" year="1960" />
<item month="2" day="15" year="1961" />
<item month="2" day="5" year="1962" />
<item month="1" day="25" year="1963" />
<item month="2" day="13" year="1964" />
<item month="2" day="2" year="1965" />
<item month="1" day="21" year="1966" />
<item month="2" day="9" year="1967" />
<item month="1" day="30" year="1968" />
<item month="2" day="17" year="1969" />
<item month="2" day="6" year="1970" />
<item month="1" day="27" year="1971" />
<item month="2" day="15" year="1972" />
<item month="2" day="3" year="1973" />
<item month="1" day="23" year="1974" />
<item month="2" day="11" year="1975" />
<item month="1" day="31" year="1976" />
<item month="2" day="18" year="1977" />
<item month="2" day="7" year="1978" />
<item month="1" day="28" year="1979" />
<item month="2" day="16" year="1980" />
<item month="2" day="5" year="1981" />
<item month="1" day="25" year="1982" />
<item month="2" day="13" year="1983" />
<item month="2" day="2" year="1984" />
<item month="2" day="20" year="1985" />
<item month="2" day="9" year="1986" />
<item month="1" day="29" year="1987" />
<item month="2" day="17" year="1988" />
<item month="2" day="6" year="1989" />
<item month="1" day="27" year="1990" />
<item month="2" day="15" year="1991" />
<item month="2" day="4" year="1992" />
<item month="1" day="23" year="1993" />
<item month="2" day="10" year="1994" />
<item month="1" day="31" year="1995" />
<item month="2" day="19" year="1996" />
<item month="2" day="7" year="1997" />
<item month="1" day="28" year="1998" />
<item month="2" day="16" year="1999" />
<item month="2" day="5" year="2000" />
<item month="1" day="24" year="2001" />
<item month="2" day="12" year="2002" />
<item month="2" day="1" year="2003" />
<item month="1" day="22" year="2004" />
<item month="2" day="9" year="2005" />
<item month="1" day="29" year="2006" />
<item month="2" day="18" year="2007" />
<item month="2" day="7" year="2008" />
<item month="1" day="26" year="2009" />
<item month="2" day="14" year="2010" />
<item month="2" day="3" year="2011" />
<item month="1" day="23" year="2012" />
<item month="2" day="10" year="2013" />
<item month="1" day="31" year="2014" />
<item month="2" day="19" year="2015" />
<item month="2" day="8" year="2016" />
<item month="1" day="28" year="2017" />
<item month="2" day="16" year="2018" />
<item month="2" day="5" year="2019" />
<item month="1" day="25" year="2020" />
<item month="2" day="12" year="2021" />
<item month="2" day="1" year="2022" />
<item month="1" day="22" year="2023" />
<item month="2" day="10" year="2024" />
<item month="1" day="29" year="2025" />
<item month="2" day="17" year="2026" />
<item month="2" day="6" year="2027" />
<item month="1" day="26" year="2028" />
<item month="2" day="13" year="2029" />
<item month="2" day="3" year="2030" />
<item month="1" day="23" year="2031" />
<item month="2" day="11" year="2032" />
<item month="1" day="31" year="2033" />
<item month="2" day="19" year="2034" />
<item month="2" day="8" year="2035" />
<item month="1" day="28" year="2036" />
<item month="2" day="15" year="2037" />
<item month="2" day="4" year="2038" />
<item month="1" day="24" year="2039" />
<item month="2" day="12" year="2040" />
<item month="2" day="1" year="2041" />
<item month="1" day="22" year="2042" />
<item month="2" day="10" year="2043" />
<item month="1" day="30" year="2044" />
<item month="2" day="17" year="2045" />
<item month="2" day="6" year="2046" />
<item month="1" day="26" year="2047" />
<item month="2" day="14" year="2048" />
<item month="2" day="2" year="2049" />
<item month="1" day="23" year="2050" />
<item month="2" day="11" year="2051" />
<item month="2" day="1" year="2052" />
<item month="2" day="19" year="2053" />
<item month="2" day="8" year="2054" />
<item month="1" day="28" year="2055" />
<item month="2" day="15" year="2056" />
<item month="2" day="4" year="2057" />
<item month="1" day="24" year="2058" />
<item month="2" day="12" year="2059" />
<item month="2" day="2" year="2060" />
<item month="1" day="21" year="2061" />
<item month="2" day="9" year="2062" />
<item month="1" day="29" year="2063" />
<item month="2" day="17" year="2064" />
<item month="2" day="5" year="2065" />
<item month="1" day="26" year="2066" />
<item month="2" day="14" year="2067" />
<item month="2" day="3" year="2068" />
<item month="1" day="23" year="2069" />
<item month="2" day="11" year="2070" />
<item month="1" day="31" year="2071" />
<item month="2" day="19" year="2072" />
<item month="2" day="7" year="2073" />
<item month="1" day="27" year="2074" />
<item month="2" day="15" year="2075" />
<item month="2" day="5" year="2076" />
<item month="1" day="24" year="2077" />
<item month="2" day="12" year="2078" />
<item month="2" day="2" year="2079" />
<item month="1" day="22" year="2080" />
<item month="2" day="9" year="2081" />
<item month="1" day="29" year="2082" />
<item month="2" day="17" year="2083" />
<item month="2" day="6" year="2084" />
<item month="1" day="26" year="2085" />
<item month="2" day="14" year="2086" />
<item month="2" day="3" year="2087" />
<item month="1" day="24" year="2088" />
<item month="2" day="10" year="2089" />
<item month="1" day="30" year="2090" />
<item month="2" day="18" year="2091" />
<item month="2" day="7" year="2092" />
<item month="1" day="27" year="2093" />
<item month="2" day="15" year="2094" />
<item month="2" day="5" year="2095" />
<item month="1" day="25" year="2096" />
<item month="2" day="12" year="2097" />
<item month="2" day="1" year="2098" />
<item month="1" day="21" year="2099" />
<item month="2" day="9" year="2100" />
</root> ===============SkyTree.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1" tree="甲" />
<item id="2" tree="乙" />
<item id="3" tree="丙" />
<item id="4" tree="丁" />
<item id="5" tree="戊" />
<item id="6" tree="己" />
<item id="7" tree="庚" />
<item id="8" tree="辛" />
<item id="9" tree="壬" />
<item id="10" tree="癸" />
</root>
=================AnimalSign.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1" name="鼠" tree="子" />
<item id="2" name="牛" tree="丑" />
<item id="3" name="虎" tree="寅" />
<item id="4" name="兔" tree="卯" />
<item id="5" name="龙" tree="辰" />
<item id="6" name="蛇" tree="巳" />
<item id="7" name="马" tree="午" />
<item id="8" name="羊" tree="未" />
<item id="9" name="猴" tree="申" />
<item id="10" name="鸡" tree="酉" />
<item id="11" name="狗" tree="戌" />
<item id="12" name="猪" tree="亥" />
</root> ===========================StarSign.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="0" name="" />
<item id="1" name="白羊" />
<item id="2" name="金牛" />
<item id="3" name="双子" />
<item id="4" name="巨蟹" />
<item id="5" name="狮子" />
<item id="6" name="处女" />
<item id="7" name="天秤" />
<item id="8" name="天蝎" />
<item id="9" name="射手" />
<item id="10" name="摩羯" />
<item id="11" name="水瓶" />
<item id="12" name="双鱼" />
</root> 查看本文来源