protected void Page_Load(object sender, EventArgs e)
{
DateTime d = DateTime.Now;
string dateStr = d.ToLocalTime().ToString();
string s = dateStr.Split(' ')[0];
s = s.Replace("/", "-");
string time1 = dateStr.Split(' ')[1];
string ygz = "";
string mz = getMonthz(s);
if (mz.Equals("丑"))
{
ygz = getYearJz(int.Parse(s.Split('-')[0]) - 1);
}
else
{
ygz = getYearJz(int.Parse(s.Split('-')[0]));
}
string mgz = getMonthg(ygz, mz);
string dgz = getDaygz(s);
string hz = getHourdz(time1.Split(':')[0]);
int h = int.Parse(time1.Split(':')[0]);
if (h == 23)
{
dgz = getDaygz(s);
int dgzIndex = Array.IndexOf(dz, dgz);
if (dgzIndex == 59)
{
dgz = dz[0];
}
else
{
dgzIndex++;
dgz = dz[dgzIndex];
}
}
string hgz = getHourgz(hz, dgz);
Response.Write(ygz + " " + mgz + " " + dgz + " " + hgz);
}
//节气间隔计算类
private class dateTimeForJq
{
public string day { get; set; }
public string jieqi { get; set; }
public int jieqiNum { get; set; }
public int diff { get; set; }
}
//五虎遁、五鼠遁
private class dun
{
public string gan { get; set; }
public string month { get; set; }
public string hour { get; set; }
public dun(string _gan,string _month,string _hour)
{
gan = _gan;
month = _month;
hour = _hour;
}
}
//五虎遁、五鼠遁
List<dun> dunlist = new List<dun>{
new dun("甲","丙寅","甲子"),
new dun("己","丙寅","甲子"),
new dun("乙","戊寅","丙子"),
new dun("庚","戊寅","丙子"),
new dun("丙","庚寅","戊子"),
new dun("辛","庚寅","戊子"),
new dun("丁","壬寅","庚子"),
new dun("壬","壬寅","庚子"),
new dun("戊","甲寅","壬子"),
new dun("癸","甲寅","壬子")};
private class Gong
{
public int id { get; set; }
public int wx { get; set; }
public string shen { get; set; }
public string door { get; set; }
public string star { get; set; }
public string dpg { get; set; }
public string tpg { get; set; }
}
//二十四节气
private string[] jq = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
//月地支排列
private string[] dz = { "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥", "子" };
//时地支排列
private string[] dzh = { "亥", "子" ,"丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌"};
//六十甲子表
public static string[] date = { "甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉",
"甲戌", "乙亥", "丙子", "丁丑", "戊寅", "乙卯", "庚辰", "辛巳", "壬午", "癸未",
"甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳",
"甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯",
"甲辰", "乙巳", "丙午", "丁未", "戊申", "乙酉", "庚戌", "辛亥", "壬子", "癸丑",
"甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥" };
//得到年干支
private string getYearJz(int year) {
int res = (year - 3) % 60;
res=(res!=0)?(res-1):59;
return date[res];
}
//月支
private string getMonthz(string s)
{
string yz = "";
string yg = "";
Dictionary<int, int> qjInt = new Dictionary<int, int>();
int a1 = diff(s);
//算出一年的24节气
for (int i = 0; i < 24; i++)
{
int a = getJq(int.Parse(s.Split('-')[0]) - 1, i);
int a2 = a1 - a;
qjInt.Add(a, a2);
}
for (int i = 0; i < 24; i++)
{
int a = getJq(int.Parse(s.Split('-')[0]), i);
int a2 = a1 - a;
qjInt.Add(a, a2);
}
for (int i = 0; i < 24; i++)
{
int a = getJq(int.Parse(s.Split('-')[0]) + 1, i);
int a2 = a1 - a;
qjInt.Add(a, a2);
}
List<dateTimeForJq> list = new List<dateTimeForJq>();
for (int i = 0; i < qjInt.Count; i++)
{
dateTimeForJq dateJq = new dateTimeForJq();
dateJq.day = diffDay(qjInt.ToList()[i].Key);
dateJq.jieqi = jq[i % 24];
dateJq.jieqiNum = i % 24;
dateJq.diff = qjInt.ToList()[i].Value;
list.Add(dateJq);
}
list = list.Where(t => Math.Abs(t.diff) <= 15).ToList();
dateTimeForJq jq1 = list[0];
//算出当前日期所在月份
int m = 0;
if (jq1.jieqiNum % 2 == 0 && jq1.diff >= 0)
{
m = jq1.jieqiNum;
}
else
{
if (list[1].diff == 0)
{
m = list[1].jieqiNum;
}
else
{
m = jq1.jieqiNum - 1;
}
}
if (m == -1)
{
yz = "丑";
}
else
{
m = m % 24 == 0 ? 12 : (m / 2);
yz = dz[m % 12];
}
return yz;
}
//月干
private string getMonthg(string ygz, string mz)
{
string yg = ygz.Substring(0, 1);
string ymg = dunlist.Where(t => t.gan.Equals(yg)).ToList()[0].month;
int bjs = Array.IndexOf(dz, mz);
bjs = bjs - 1;
if (bjs < 0)
{
bjs = bjs + 12;
}
int gzindex = Array.IndexOf(date, ymg);
gzindex = (gzindex + bjs) % 60;
gzindex = (gzindex != 0) ? (gzindex) : 59;
return date[gzindex];
}
//日干支
private string getDaygz(string s)
{
int a = diff(s);
int b = Array.IndexOf(date, "甲戌");
int c = (a) % 60;
c += b;
c %= 60;
c = (c != 0) ? (c - 1) : 59;
return date[c];
}
//时支
private string getHourdz(string p)
{
int a = int.Parse(p);
int shang = a / 2;
int yu = a % 2;
if (yu == 0)
{
shang = shang - 1;
shang %= 12;
return dz[shang];
}
else
{
return dz[shang];
}
}
//时干支
private string getHourgz(string hz, string dgz)
{
string dg = dgz.Substring(0, 1);
string zhg = dunlist.Where(t => t.gan.Equals(dg)).ToList()[0].hour;
int bjs = Array.IndexOf(dzh, hz);
int cha = bjs-1;
if (cha < 0)
{
cha = cha + 12;
}
int gzindex = Array.IndexOf(date, zhg);
gzindex = (gzindex + cha) % 60;
gzindex = (gzindex != 0) ? (gzindex) : 59;
return date[gzindex];
}
//计算节气
private int getJq(int year, int seq)
{
double l = 365.242 * (year - 1900) + 6.2 + 15.22 * seq - 1.9 * Math.Sin(0.262 * seq);
int a = (int)Math.Floor(l);
return a;
}
private int diff(string str1)
{
int year1 = int.Parse(str1.Split('-')[0]);
int month1 = int.Parse(str1.Split('-')[1]);
int day1 = int.Parse(str1.Split('-')[2]);
DateTime date1 = new DateTime(year1, month1, day1);
DateTime date2 = new DateTime(1899, 12, 31);
TimeSpan diff = date1.Subtract(date2);
return (int)diff.TotalDays;
}
private string diffDay(int a)
{
DateTime d = new DateTime(1899, 12, 31);
d = d.AddDays(a);
return d.ToShortDateString();
}