以下是星座類,用於判斷你屬於哪個星座,也可以獲取星座對應當日期範圍
其中涉及到的類Segment將會在文章末尾解釋
using System;
using System.Collections.Generic;
using System.Text;
namespace UserLib.World.Time
{
/// <summary>
/// 星座
/// </summary>
public class Constellation
{
private static Segment[] data=new Segment[12]; //保存星座數據
/// <summary>
/// 日期索引函數
/// </summary>
/// <param name="dt">日期</param>
/// <returns>對應的索引</returns>
private static int Index(DateTime dt)
{
//將年份統一爲
//因爲年是閏年,當輸入的日期爲月日時,程序不會出錯
DateTime rdt = new DateTime(2000, dt.Month, dt.Day);
for(int i=0;i<12;i++)
{
if (rdt>=data[i].StartDateTime && rdt<=data[i].EndDateTime)
{
return i;
}
}
return -1;
}
/// <summary>
/// 中文名稱索引函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <returns>對應的索引</returns>
private static int IndexCN(string cnName)
{
for (int i = 0; i < 12; i++)
{
if (data[i].CNName == cnName)
{
return i;
}
}
return -1;
}
/// <summary>
/// 英文名稱索引函數
/// </summary>
/// <param name="enName">英文名稱</param>
/// <returns>對應的索引</returns>
private static int IndexEN(string enName)
{
for (int i = 0; i < 12; i++)
{
if (data[i].ENName.ToLower() == enName.ToLower())
{
return i;
}
}
return -1;
}
/// <summary>
/// 構造函數
/// </summary>
static Constellation()
{
data[0] = new Segment("水瓶座", "Aquarius", new DateTime(2000, 1, 21), new DateTime(2000, 2, 18));
data[1] = new Segment("雙魚座", "Pisces", new DateTime(2000, 2, 19), new DateTime(2000, 3, 20));
data[2] = new Segment("白羊座", "Aries", new DateTime(2000, 3, 21), new DateTime(2000, 4, 20));
data[3] = new Segment("金牛座", "Taurus", new DateTime(2000, 4, 21), new DateTime(2000, 5, 21));
data[4] = new Segment("雙子座", "Gemini", new DateTime(2000, 5, 22), new DateTime(2000, 6, 21));
data[5] = new Segment("巨蟹座", "Cancer", new DateTime(2000, 6, 22), new DateTime(2000, 7, 22));
data[6] = new Segment("獅子座", "Leo", new DateTime(2000, 7, 23), new DateTime(2000, 8, 23));
data[7] = new Segment("處女座", "Virgo", new DateTime(2000, 8, 24), new DateTime(2000, 9, 22));
data[8] = new Segment("天秤座", "Libra", new DateTime(2000, 9, 23), new DateTime(2000, 10, 23));
data[9] = new Segment("天蠍座", "Scorpio", new DateTime(2000, 10, 24), new DateTime(2000, 11, 22));
data[10] = new Segment("射手座", "Sagittarius", new DateTime(2000, 11, 23), new DateTime(2000, 12, 21));
data[11] = new Segment("摩羯座", "Capricorn", new DateTime(2000, 12, 22), new DateTime(2000, 1, 20));
}
/// <summary>
/// 獲取星座的中文名稱
/// </summary>
/// <param name="dt">日期</param>
/// <returns>星座的中文名稱</returns>
public static string GetCNName(DateTime dt)
{
int i = Index(dt);
return data[i].CNName;
}
/// <summary>
/// 獲取星座的英文名稱
/// </summary>
/// <param name="dt">日期</param>
/// <returns>星座的英文名稱</returns>
public static string GetENName(DateTime dt)
{
int i = Index(dt);
return data[i].ENName;
}
/// <summary>
/// 獲取星座的起始日期
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <returns>星座的起始日期</returns>
public static DateTime GetStartDateByCNName(string cnName)
{
int i = IndexCN(cnName);
if (i != -1)
{
return data[i].StartDateTime;
}
else
{
throw new IndexOutOfRangeException();
}
}
/// <summary>
/// 獲取星座的終止日期
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <returns>星座的終止日期</returns>
public static DateTime GetEndDateByCNName(string cnName)
{
int i = IndexCN(cnName);
if (i != -1)
{
return data[i].EndDateTime;
}
else
{
throw new IndexOutOfRangeException();
}
}
/// <summary>
/// 獲取星座的起始日期
/// </summary>
/// <param name="enName">英文名稱</param>
/// <returns>星座的起始日期</returns>
public static DateTime GetStartDateByENName(string enName)
{
int i = IndexEN(enName);
if (i != -1)
{
return data[i].StartDateTime;
}
else
{
throw new IndexOutOfRangeException();
}
}
/// <summary>
/// 獲取星座的終止日期
/// </summary>
/// <param name="enName">英文名稱</param>
/// <returns>星座的終止日期</returns>
public static DateTime GetEndDateByENName(string enName)
{
int i = IndexEN(enName);
if (i != -1)
{
return data[i].EndDateTime;
}
else
{
throw new IndexOutOfRangeException();
}
}
/// <summary>
/// 獲取星座的起始日期
/// </summary>
/// <param name="dt">日期</param>
/// <returns>星座的起始日期</returns>
public static DateTime GetStartDateByDate(DateTime dt)
{
int i = Index(dt);
return data[i].StartDateTime;
}
/// <summary>
/// 獲取星座的終止日期
/// </summary>
/// <param name="dt">日期</param>
/// <returns>星座的終止日期</returns>
public static DateTime GetEndDateByDate(DateTime dt)
{
int i = Index(dt);
return data[i].EndDateTime;
}
}
}
下面解釋上文中提到的Segment類
此類是用於保存每個時間對應當意義或節日名稱,在星座類中用於保存各個星座的時間段。
using System;
using System.Collections.Generic;
using System.Text;
namespace UserLib.World.Time
{
/// <summary>
/// 用於存儲一個時間斷對應的意義
/// </summary>
public class Segment
{
private string cnName; //中文名稱
private string cnShortName; //中文名稱縮寫
private string enName; //英文名稱
private string enShortName; //英文名稱縮寫
private DateTime start; //起始時間
private DateTime end; //終止時間
/// <summary>
/// 賦值函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="cnShortName">中文名稱縮寫</param>
/// <param name="enName">英文名稱</param>
/// <param name="enShortName">英文名稱縮寫</param>
/// <param name="startDateTime">起始日期</param>
/// <param name="endDateTime">終止日期</param>
private void Evaluate(string cnName, string cnShortName, string enName, string enShortName, DateTime startDateTime, DateTime endDateTime)
{
this.cnName = cnName;
this.cnShortName = cnShortName;
this.enName = enName;
this.enShortName = enShortName;
start = startDateTime;
end = endDateTime;
}
#region 構造函數
/// <summary>
/// 構造函數
/// </summary>
public Segment() { }
/// <summary>
/// 構造函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="dateTime">時間</param>
public Segment(string cnName, DateTime dateTime)
{
Evaluate(cnName, null, null, null, dateTime, dateTime);
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="enName">英文名稱</param>
/// <param name="dateTime">時間</param>
public Segment(string cnName, string enName, DateTime dateTime)
{
Evaluate(cnName, null, enName, null, dateTime, dateTime);
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="cnShortName">中文名稱縮寫</param>
/// <param name="enName">英文名稱</param>
/// <param name="enShortName">英文名稱縮寫</param>
/// <param name="dateTime">時間</param>
public Segment(string cnName, string cnShortName, string enName, string enShortName, DateTime dateTime)
{
Evaluate(cnName, cnShortName, enName, enShortName, dateTime, dateTime);
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="startDateTime">起始日期</param>
/// <param name="endDateTime">終止日期</param>
public Segment(string cnName, DateTime startDateTime, DateTime endDateTime)
{
Evaluate(cnName, null, null, null, startDateTime, endDateTime);
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="enName">英文名稱</param>
/// <param name="startDateTime">起始日期</param>
/// <param name="endDateTime">終止日期</param>
public Segment(string cnName, string enName, DateTime startDateTime, DateTime endDateTime)
{
Evaluate(cnName, null, enName, null, startDateTime, endDateTime);
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="cnName">中文名稱</param>
/// <param name="cnShortName">中文名稱縮寫</param>
/// <param name="enName">英文名稱</param>
/// <param name="enShortName">英文名稱縮寫</param>
/// <param name="startDateTime">起始日期</param>
/// <param name="endDateTime">終止日期</param>
public Segment(string cnName, string cnShortName, string enName, string enShortName, DateTime startDateTime, DateTime endDateTime)
{
Evaluate(cnShortName, cnShortName, enName, enShortName, startDateTime, endDateTime);
}
#endregion
#region 屬性
/// <summary>
/// 獲取或設置中文名稱
/// </summary>
public string CNName
{
get
{
return cnName;
}
set
{
cnName = value;
}
}
/// <summary>
/// 獲取或設置中文名稱縮寫
/// </summary>
public string CNShortName
{
get
{
return cnShortName;
}
set
{
cnShortName = value;
}
}
/// <summary>
/// 獲取或設置英文名稱
/// </summary>
public string ENName
{
get
{
return enName;
}
set
{
enName = value;
}
}
/// <summary>
/// 獲取或設置英文名稱縮寫
/// </summary>
public string ENShortName
{
get
{
return enShortName;
}
set
{
enShortName = value;
}
}
/// <summary>
/// 獲取或設置起始時間
/// </summary>
public DateTime StartDateTime
{
get
{
return start;
}
set
{
start = value;
}
}
/// <summary>
/// 獲取或設置終止時間
/// </summary>
public DateTime EndDateTime
{
get
{
return end;
}
set
{
end = value;
}
}
#endregion
}
}