C# DateTime的11種構造函數

別的也很少說沒直接貼代碼git

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;

namespace Time20180929_DateTime
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * 1.DateTime(Int64):將 DateTime 結構的新實例初始化爲指定的刻度數。
             * 2.DateTime(Int64, DateTimeKind):將 DateTime 結構的新實例初始化爲指定的計時週期數以及協調世界時 (UTC) 或本地時間。
             * 3.DateTime(Int32, Int32, Int32):將 DateTime 結構的新實例初始化爲指定的年、月和日。
             * 4.DateTime(Int32, Int32, Int32, Calendar):將 DateTime 結構的新實例初始化爲指定日曆的指定年、月和日。
             * 5.DateTime(Int32, Int32, Int32, Int32, Int32, Int32):將 DateTime 結構的新實例初始化爲指定的年、月、日、小時、分鐘和秒。
             * 6.DateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)    :將 DateTime 結構的新實例初始化爲指定年、月、日、小時、分鐘、秒和協調世界時 (UTC) 或本地時間。
             * 7.DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar):將 DateTime 結構的新實例初始化爲指定日曆的年、月、日、小時、分鐘和秒。
             * 8.DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32):將 DateTime 結構的新實例初始化爲指定的年、月、日、小時、分鐘、秒和毫秒。
             * 9.DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind):將 DateTime 結構的新實例初始化爲指定年、月、日、小時、分鐘、秒、毫秒和協調世界時 (UTC) 或本地時間。
             * 10.DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar):將 DateTime 結構的新實例初始化爲指定日曆的指定年、月、日、小時、分鐘、秒和毫秒。
             * 11.DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind):將 DateTime 結構的新實例初始化爲指定日曆的指定年、月、日、小時、分鐘、秒、毫秒和協調世界時 (UTC) 或本地時間。
             */



            /*
             * 1.public DateTime (long ticks):
             * 一個日期和時間,以公曆 0001 年 1 月 1 日 00:00:00.000 以來所經歷的以 100 納秒爲間隔的間隔數來表示。
             * ticks 小於 MinValue 或大於 MaxValue。
             */
            //時間屬性MinValue和MaxValue
            long _minval = DateTime.MinValue.Ticks;
            long _maxval = DateTime.MaxValue.Ticks;
            DateTime _mintime = DateTime.MinValue;
            DateTime _maxtime = DateTime.MaxValue;
            string desc = "minval:{0}, _maxval:{1}, _mintime:{2}, _maxtime:{3}";

            string format = "{0}) The {1} date and time is {2:MM/dd/yy hh:mm:ss tt}";
            DateTime dt1 = new DateTime(DateTime.MinValue.Ticks);
            DateTime dt2 = new DateTime(DateTime.MaxValue.Ticks);

            //建立一個傳統時間爲上午2018/9/29 10:39:50基於名稱指定的區域性"en-US"並基於布爾值(指定是否使用系統中用戶選定的區域性設文化ticks
            long ticks = new DateTime(2018, 9, 29, 10, 39, 50, new CultureInfo("en-US", false).Calendar).Ticks;
            DateTime dt3 = new DateTime(ticks);

            Console.WriteLine(desc, _minval, _maxval, _mintime, _maxtime);
            Console.WriteLine(format, 1, "minimum", dt1);
            Console.WriteLine(format, 2, "maxmum", dt2);
            Console.WriteLine(format, 3, "custom ", dt3);
            Console.WriteLine("\nThe custom date and time is created from {0:N0} ticks.", ticks);
            Console.WriteLine("\nThe custom date and time is created from {0} ticks.", ticks);

            /*
            minval:0, _maxval:3155378975999999999, _mintime:0001/1/1 0:00:00, _maxtime:9999/12/31 23:59:59
            1) The minimum date and time is 01/01/01 12:00:00 上午
            2) The maxmum date and time is 12/31/99 11:59:59 下午
            3) The custom  date and time is 09/29/18 10:39:50 上午

            The custom date and time is created from 636,738,143,900,000,000 ticks.

            The custom date and time is created from 636738143900000000 ticks.
             */

            /*
             * 2.public DateTime (long ticks, DateTimeKind kind);
             * DateTime(Int64, DateTimeKind):將 DateTime 結構的新實例初始化爲指定的計時週期數以及協調世界時 (UTC) 或本地時間。
             * kind:
             * Unspecified  0   表示的時間既未指定爲本地時間,也未指定爲協調通用時間 (UTC)。
             * Utc          1   表示的時間爲 UTC。
             * Local        2   表示的時間爲本地時間
             */
            long ticks2 = new DateTime(2018, 9, 29, 10, 39, 50, new CultureInfo("en-US", false).Calendar).Ticks;
            Console.WriteLine("2018-09-29 10:39:50");
            Console.WriteLine("Unspecified:{0}", new DateTime(ticks2, DateTimeKind.Unspecified));
            Console.WriteLine("Utc:{0}", new DateTime(ticks2, DateTimeKind.Utc));
            Console.WriteLine("Local:{0}", new DateTime(ticks2, DateTimeKind.Local));
            /*
             2018-09-29 10:39:50
            Unspecified:2018/9/29 10:39:50
            Utc:2018/9/29 10:39:50
            Local:2018/9/29 10:39:50
             */
            /*
             * 3.public DateTime (int year, int month, int day);
             * DateTime(Int32, Int32, Int32)
             * 將 DateTime 結構的新實例初始化爲指定的年、月和日。
             * year:1-9999,month:0-12,day:1-moth中的天數
             */
            DateTime dt4 = new DateTime(2018, 9, 18);
            Console.WriteLine("dt4的值爲{0}", dt4.ToString());
            /*
             dt4的值爲2018/9/18 0:00:00
             */


            /*
             * 4.public DateTime (int year, int month, int day, System.Globalization.Calendar calendar);
             * DateTime(Int32, Int32, Int32, Calendar):將 DateTime 結構的新實例初始化爲指定日曆的指定年、月和日。
             * year:1-9999,month:0-12,day:1-moth中的天數,Calendar用於解釋 year、month 和 day 的日曆。
             */
            /*
             下面的示例調用DateTime(Int32, Int32, Int32, Calendar)構造函數兩次實例化兩個DateTime值。 第一次調用實例化DateTime經過使用值PersianCalendar對象。 因爲波斯日曆不能指定爲區域性的默認日曆,顯示日期與波斯歷須要單獨調用其PersianCalendar.GetMonth, PersianCalendar.GetDayOfMonth,和PersianCalendar.GetYear方法。 構造函數的第二個調用實例化DateTime經過使用值HijriCalendar對象。 該示例將當前區域性更改成阿拉伯語 (敘利亞) 和當前區域性的默認日曆更改成回曆。 由於回曆是當前區域性的默認日曆,Console.WriteLine方法使用它來設置日期格式。 還原先前的當前區域性 (這在此狀況下是英語 (美國)) 時,Console.WriteLine方法使用當前區域性的默認公曆日從來設置日期格式。
             */
           Console.WriteLine("Using the Persian Calendar:");
           PersianCalendar persian = new PersianCalendar();
           DateTime dt5 = new DateTime(2018,9,29, persian);
           Console.WriteLine(dt5.ToString());
           Console.WriteLine("{0}/{1}/{2}\n", persian.GetMonth(dt5),persian.GetDayOfMonth(dt5),persian.GetYear(dt5));

           Console.WriteLine("Using the Hijri Calendar:");
           CultureInfo dftCulture = Thread.CurrentThread.CurrentCulture;

           // Define Hijri calendar.
           HijriCalendar hijri = new HijriCalendar();
           // Make ar-SY the current culture and Hijri the current calendar.
           Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
           CultureInfo current = CultureInfo.CurrentCulture;
           current.DateTimeFormat.Calendar = hijri;
           string dFormat = current.DateTimeFormat.ShortDatePattern;
           // Ensure year is displayed as four digits.
           dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy");
           current.DateTimeFormat.ShortDatePattern = dFormat;
           DateTime date2 = new DateTime(2018,9,29, hijri);
           Console.WriteLine("{0} culture using the {1} calendar: {2:d}", current,GetCalendarName(hijri), date2);

           // Restore previous culture.
           Thread.CurrentThread.CurrentCulture = dftCulture;
           Console.WriteLine("{0} culture using the {1} calendar: {2:d}",CultureInfo.CurrentCulture,GetCalendarName(CultureInfo.CurrentCulture.Calendar),date2);
           /*
            Using the Persian Calendar:
           2639/12/20 0:00:00
           9/29/2018

           Using the Hijri Calendar:
           ar-SY culture using the Hijri calendar: 29/09/2018
           zh-CN culture using the Gregorian calendar: 2580/3/16
            */

            /*
             * 5.public DateTime (int year, int month, int day, int hour, int minute, int second);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32)
             * 將 DateTime 結構的新實例初始化爲指定的年、月、日、小時、分鐘和秒。
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59
             */
            DateTime date1 = new DateTime(2018, 9, 29, 11, 20, 26);
            Console.WriteLine(date1.ToString());
            /*2018/9/29 11:20:26*/

            /*
             * 6.public DateTime (int year, int month, int day, int hour, int minute, int second, DateTimeKind kind);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)
             * 將 DateTime 結構的新實例初始化爲指定年、月、日、小時、分鐘、秒和協調世界時 (UTC) 或本地時間。
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59
             *kind:
             *Unspecified  0   表示的時間既未指定爲本地時間,也未指定爲協調通用時間 (UTC)。
             *Utc          1   表示的時間爲 UTC。
             *Local        2   表示的時間爲本地時間
             */
            DateTime date9 = new DateTime(2010, 8, 18, 16, 32, 0, DateTimeKind.Local);
            Console.WriteLine("日期:{0}\nDateTimeKind:{1}", date9, date9.Kind);
            /*
             日期:2010/8/18 16:32:00
              DateTimeKind:Local
             */

            /*
             *7.public DateTime (int year, int month, int day, int hour, int minute, int second, System.Globalization.Calendar calendar);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar)
             * 將 DateTime 結構的新實例初始化爲指定日曆的年、月、日、小時、分鐘和秒。
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59,
             * calendar:用於解釋 year、month 和 day 的日曆。
             */

            /*
             *8.public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32)
             * 將 DateTime 結構的新實例初始化爲指定的年、月、日、小時、分鐘、秒和毫秒。
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59,millisecond:0-999
             */

            DateTime date3 = new DateTime(2018, 9, 29, 13, 44, 30, 555);
            Console.WriteLine(date3.ToString("MM/dd/yyyy HH:mm:ss.fff tt"));
            /*09/29/2018 13:44:30.555 下午*/

            /*
             * 9.public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)
             * 將 DateTime 結構的新實例初始化爲指定年、月、日、小時、分鐘、秒、毫秒和協調世界時 (UTC) 或本地時間。   
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59,millisecond:0-999
             * kind:枚舉值之一,該值指示 year、month、day、hour、minute、second 和 millisecond 指定了本地時間、
             * 協調世界時 (UTC),仍是二者皆未指定。
             */
            DateTime date4 = new DateTime(2018, 9, 29, 13, 48, 30, 500, DateTimeKind.Local);
            Console.WriteLine("{0:M/dd/yyyy h:mm:ss.fff tt} {1}", date4, date4.Kind);
            /*
             * 9/29/2018 1:48:30.500 下午 Local
             */

            /*
             * 10.public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, System.Globalization.Calendar calendar);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)
             * 將 DateTime 結構的新實例初始化爲指定日曆的指定年、月、日、小時、分鐘、秒和毫秒。
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59,millisecond:0-999
             * calendar:用於解釋 year、month 和 day 的日曆
             */

            /*
             下面的示例調用DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)構造函數兩次實例化兩個DateTime值。 第一次調用實例化DateTime經過使用值PersianCalendar對象。 因爲波斯日曆不能指定爲區域性的默認日曆,顯示日期與波斯歷須要單獨調用其PersianCalendar.GetMonth, PersianCalendar.GetDayOfMonth,和PersianCalendar.GetYear方法。 構造函數的第二個調用實例化DateTime經過使用值HijriCalendar對象。 該示例將當前區域性更改成阿拉伯語 (敘利亞) 和當前區域性的默認日曆更改成回曆。 由於回曆是當前區域性的默認日曆,Console.WriteLine方法使用它來設置日期格式。 還原先前的當前區域性 (這在此狀況下是英語 (美國)) 時,Console.WriteLine方法使用當前區域性的默認公曆日從來設置日期格式。
             */
            Console.WriteLine("Using the Persian Calendar:");
            PersianCalendar persian2 = new PersianCalendar();
            DateTime date5 = new DateTime(1397, 3, 29, 16, 32, 18, 500, persian2);
            Console.WriteLine(date5.ToString("M/dd/yyyy h:mm:ss.fff tt"));
            Console.WriteLine("{0}/{1}/{2} {3}{7}{4:D2}{7}{5:D2}.{6:G3}\n",
                                             persian2.GetMonth(date5),
                                             persian2.GetDayOfMonth(date5),
                                             persian2.GetYear(date5),
                                             persian2.GetHour(date5),
                                             persian2.GetMinute(date5),
                                             persian2.GetSecond(date5),
                                             persian2.GetMilliseconds(date5),
                                             DateTimeFormatInfo.CurrentInfo.TimeSeparator);

            Console.WriteLine("Using the Hijri Calendar:");
            // Get current culture so it can later be restored.
            CultureInfo dftCulture2 = Thread.CurrentThread.CurrentCulture;

            // Define strings for use in composite formatting.
            string dFormat2;
            string fmtString;
            // Define Hijri calendar.
            HijriCalendar hijri2 = new HijriCalendar();
            // Make ar-SY the current culture and Hijri the current calendar.
            Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
            CultureInfo current2 = CultureInfo.CurrentCulture;
            current2.DateTimeFormat.Calendar = hijri2;
            dFormat2 = current.DateTimeFormat.ShortDatePattern;
            // Ensure year is displayed as four digits.
            dFormat2 = Regex.Replace(dFormat2, "/yy$", "/yyyy") + " H:mm:ss.fff";
            fmtString = "{0} culture using the {1} calendar: {2:" + dFormat2 + "}";
            DateTime date6 = new DateTime(1431, 9, 9, 16, 32, 18, 500, hijri2);
            Console.WriteLine(fmtString, current2, GetCalendarName(hijri2), date6);

            // Restore previous culture.
            Thread.CurrentThread.CurrentCulture = dftCulture;
            dFormat2 = DateTimeFormatInfo.CurrentInfo.ShortDatePattern + " H:mm:ss.fff";
            fmtString = "{0} culture using the {1} calendar: {2:" + dFormat2 + "}";
            Console.WriteLine(fmtString,
                              CultureInfo.CurrentCulture,
                              GetCalendarName(CultureInfo.CurrentCulture.Calendar),
                              date6);

            /*
             Using the Persian Calendar:
             6/19/2018 4:32:18.500 下午
             3/29/1397 16:32:18.500

             Using the Hijri Calendar:
             ar-SY culture using the Hijri calendar: 09/09/1431 16:32:18.500
             zh-CN culture using the Gregorian calendar: 2010/8/18 16:32:18.500
             */

            /*
             * 11.public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, System.Globalization.Calendar calendar, DateTimeKind kind);
             * DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)
             * 將 DateTime 結構的新實例初始化爲指定日曆的指定年、月、日、小時、分鐘、秒、毫秒和協調世界時 (UTC) 或本地時間。
             * year:1-9999,month:0-12,day:1-moth中的天數,hour:0-23,minuye:0-59,second:0-59,millisecond:0-999
             * calendar:用於解釋 year、month 和 day 的日曆
             * kind:枚舉值之一,該值指示 year、month、day、hour、minute、second 和 millisecond 指定了本地時間、
             * 協調世界時 (UTC),仍是二者皆未指定。
             */
            /*
            下面的示例調用DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)構造函數兩次實例化兩個DateTime值。 第一次調用實例化DateTime經過使用值PersianCalendar對象。 因爲波斯日曆不能指定爲區域性的默認日曆,顯示日期與波斯歷須要單獨調用其PersianCalendar.GetMonth, PersianCalendar.GetDayOfMonth,和PersianCalendar.GetYear方法。 構造函數的第二個調用實例化DateTime經過使用值HijriCalendar對象。 該示例將當前區域性更改成阿拉伯語 (敘利亞) 和當前區域性的默認日曆更改成回曆。 由於回曆是當前區域性的默認日曆,Console.WriteLine方法使用它來設置日期格式。 還原先前的當前區域性 (這在此狀況下是英語 (美國)) 時,Console.WriteLine方法使用當前區域性的默認公曆日從來設置日期格式。 
            */
            Console.WriteLine("Using the Persian Calendar:");
            PersianCalendar persian3 = new PersianCalendar();
            DateTime date7 = new DateTime(1397, 3, 29, 16, 32, 18, 500,
                                          persian3, DateTimeKind.Local);
            Console.WriteLine("{0:M/dd/yyyy h:mm:ss.fff tt} {1}", date7, date7.Kind);
            Console.WriteLine("{0}/{1}/{2} {3}{8}{4:D2}{8}{5:D2}.{6:G3} {7}\n",
                                             persian3.GetMonth(date7),
                                             persian3.GetDayOfMonth(date7),
                                             persian3.GetYear(date7),
                                             persian3.GetHour(date7),
                                             persian3.GetMinute(date7),
                                             persian3.GetSecond(date7),
                                             persian3.GetMilliseconds(date7),
                                             date7.Kind,
                                             DateTimeFormatInfo.CurrentInfo.TimeSeparator);

            Console.WriteLine("Using the Hijri Calendar:");
            // Get current culture so it can later be restored.
            CultureInfo dftCulture3 = Thread.CurrentThread.CurrentCulture;

            // Define strings for use in composite formatting.
            string dFormat3;
            string fmtString3;
            // Define Hijri calendar.
            HijriCalendar hijri3 = new HijriCalendar();
            // Make ar-SY the current culture and Hijri the current calendar.
            Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
            CultureInfo current3 = CultureInfo.CurrentCulture;
            current3.DateTimeFormat.Calendar = hijri3;
            dFormat3 = current3.DateTimeFormat.ShortDatePattern;
            // Ensure year is displayed as four digits.
            dFormat3 = Regex.Replace(dFormat3, "/yy$", "/yyyy") + " H:mm:ss.fff";
            fmtString3 = "{0} culture using the {1} calendar: {2:" + dFormat3 + "} {3}";
            DateTime date8 = new DateTime(1431, 9, 9, 16, 32, 18, 500,
                                          hijri3, DateTimeKind.Local);
            Console.WriteLine(fmtString3, current3, GetCalendarName(hijri3),
                              date8, date8.Kind);

            // Restore previous culture.
            Thread.CurrentThread.CurrentCulture = dftCulture3;
            dFormat3 = DateTimeFormatInfo.CurrentInfo.ShortDatePattern + " H:mm:ss.fff";
            fmtString3= "{0} culture using the {1} calendar: {2:" + dFormat3 + "} {3}";
            Console.WriteLine(fmtString3,
                              CultureInfo.CurrentCulture,
                              GetCalendarName(CultureInfo.CurrentCulture.Calendar),
                              date8, date8.Kind);
            /*
             Using the Persian Calendar:
             6/19/2018 4:32:18.500 下午 Local
             3/29/1397 16:32:18.500 Local

             Using the Hijri Calendar:
             ar-SY culture using the Hijri calendar: 09/09/1431 16:32:18.500 Local
             zh-CN culture using the Gregorian calendar: 2010/8/18 16:32:18.500 Local
             */
            Console.ReadKey();
        }
        private static string GetCalendarName(Calendar cal)
        {
            return Regex.Match(cal.ToString(), "\\.(\\w+)Calendar").Groups[1].Value;
        }
    }
}
相關文章
相關標籤/搜索