.NET BCL Series | DateTime
2022-06-24
筆記 .NET Base Class Library 各式基礎函式庫的使用原理與技巧,讓開發 .NET 程式自然且流暢 🙂
說明
建構子
new DateTime();
// 1/1/0001 12:00:00 AM
new DateTime(DateTime.Now.Ticks);
// 637919541000000000
// 6/27/2022 7:15:00 PM
new DateTime(2022, 6, 27, 19, 15, 00);
// 6/27/2022 7:15:00 PM
Kind
每一個 DateTime 物件都有 Kind 屬性,表示日期時間所使用為 UTC 或者是 Local Time。
如果要調整 DateTime 物件的 Kind,可以藉由 DateTime.SpecifyKind
的方式來重新賦值。
Console.WriteLine(DateTime.UtcNow.ToLocalTime());
var now = DateTime.Now;
for (int i = 0; i < 10; i++)
{
now = DateTime.SpecifyKind(now, DateTimeKind.Utc).ToLocalTime();
Console.WriteLine(now);
}
FromFileTime
藉由 LDAP 讀取 AD 中的屬性,部分屬性為 FileTime 必須藉由, DateTime.FromFileTime
來讀取。
需要增加 Reference
- System.DirectoryServices.dll
- System.DirectoryServices.Protocols.dll
- System.DirectoryServices.AccountManagement.dll
using System.DirectoryServices;
DirectoryEntry entry = new DirectoryEntry("LDAP://192.168.112.1");
DirectorySearcher Dsearch = new DirectorySearcher(entry);
Dsearch.Filter = "(&(objectClass=user)(objectClass=person)(sAMAccountName=" + 'sdwh_1' + "))";
foreach (SearchResult sResultSet in Dsearch.FindAll())
{
DateTime BadPasswordTime = new DateTime(1600, 01, 01, 8, 0, 0, DateTimeKind.Local);
if (sResultSet.Properties["badPasswordTime"].Count > 0)
{
BadPasswordTime= DateTime.FromFileTime((long)sResultSet.Properties["badPasswordTime"][0]);
}
}
Now vs Today vs UtcNow
DateTime.Now;
// 6/27/2022 7:15:00 PM
DateTime.UtcNow;
// 6/27/2022 11:15:00 AM
DateTime.UtcNow.ToLocalTime();
// 6/27/2022 7:15:00 PM
DateTime.Today;
// 6/27/2022 12:00:00 AM
民國年
using System.Globalization;
new DateTime(111, 6, 27, 19, 15, 00, new TaiwanCalendar());
// 6/27/2022 7:15:00 PM
new TaiwanCalendar().GetYear(DateTime.Now);
/// 111
日本曆
var jaJp = new CultureInfo("ja-JP");
jaJp.DateTimeFormat.Calendar = new JapaneseCalendar();
DateTime.Now.ToString("", jaJp);
// 令和4年6月27日 19:15:00
DateTime.Now.ToString("dddd", jaJp);
// 月曜日
DateTime Parse
DateTime.Parse("2022年6月27日");
// 6/27/2022 12:00:00 AM
var jaJp = new CultureInfo("ja-JP");
jaJp.DateTimeFormat.Calendar = new JapaneseCalendar();
DateTime.Parse("令和4年6月27日 19:15:00", jaJp);
// 6/27/2022 7:15:00 PM
妙用 DateTime
星期比較,比較今天是否為星期六
DateTime.Now.DayOfWeek == DayOfWeek.Saturday
取得星期名稱 (法國)
CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat.GetMonthName(DateTime.Now.Month);
// juin
年份的日數,取得 2022 年 (民國 111 年) 以及 2020 年 (民國 109 年) 共有幾日
new GregorianCalendar().GetDaysInYear(2022);
// 365
new GregorianCalendar().GetDaysInYear(2020);
// 366
new TaiwanCalendar().GetDaysInYear(111);
// 365
new TaiwanCalendar().GetDaysInYear(109);
// 366
GregorianCalendar | learn.microsoft
月份的日數,取得 2022 年 6 月共有幾日
DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
// 30