正确计算天干地支生肖的函数(.net)---更正版

因为要用到一个 算干支的函数
但在网上找了好长时间,没有发现算的正确的(按春节划分如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 >

原创作品欢迎转载,请保留作者信息:邹健20070106深夜
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值