수색…


DateTime.Add (TimeSpan)

// Calculate what day of the week is 36 days from this instant.
System.DateTime today = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0);
System.DateTime answer = today.Add(duration);
System.Console.WriteLine("{0:dddd}", answer);

DateTime.AddDays (Double)

dateTime 객체에 요일을 추가합니다.

DateTime today = DateTime.Now;
DateTime answer = today.AddDays(36);
Console.WriteLine("Today: {0:dddd}", today);
Console.WriteLine("36 days from today: {0:dddd}", answer);

또한 음수 값을 전달하는 일을 뺄 수 있습니다.

DateTime today = DateTime.Now;
DateTime answer = today.AddDays(-3);
Console.WriteLine("Today: {0:dddd}", today);
Console.WriteLine("-3 days from today: {0:dddd}", answer);

DateTime.AddHours (Double)

double[] hours = {.08333, .16667, .25, .33333, .5, .66667, 1, 2, 
                        29, 30, 31, 90, 365};
DateTime dateValue = new DateTime(2009, 3, 1, 12, 0, 0);

foreach (double hour in hours)
  Console.WriteLine("{0} + {1} hour(s) = {2}", dateValue, hour, 
                           dateValue.AddHours(hour));

DateTime.AddMilliseconds (Double)

string dateFormat = "MM/dd/yyyy hh:mm:ss.fffffff"; 
DateTime date1 = new DateTime(2010, 9, 8, 16, 0, 0);
Console.WriteLine("Original date: {0} ({1:N0} ticks)\n",
                  date1.ToString(dateFormat), date1.Ticks);

DateTime date2 = date1.AddMilliseconds(1);
Console.WriteLine("Second date:   {0} ({1:N0} ticks)",
                  date2.ToString(dateFormat), date2.Ticks);
Console.WriteLine("Difference between dates: {0} ({1:N0} ticks)\n",
                  date2 - date1, date2.Ticks - date1.Ticks);                        

DateTime date3 = date1.AddMilliseconds(1.5);
Console.WriteLine("Third date:    {0} ({1:N0} ticks)",
                  date3.ToString(dateFormat), date3.Ticks);
Console.WriteLine("Difference between dates: {0} ({1:N0} ticks)",
                  date3 - date1, date3.Ticks - date1.Ticks);   

DateTime.Compare (날짜 시간 t1, 날짜 시간 t2)

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
    relationship = "is earlier than";
else if (result == 0)
    relationship = "is the same time as";         
else relationship = "is later than";

Console.WriteLine("{0} {1} {2}", date1, relationship, date2);

DateTime.DaysInMonth (Int32, Int32)

const int July = 7;
const int Feb = 2;

int daysInJuly = System.DateTime.DaysInMonth(2001, July);
Console.WriteLine(daysInJuly);

// daysInFeb gets 28 because the year 1998 was not a leap year.
int daysInFeb = System.DateTime.DaysInMonth(1998, Feb);
Console.WriteLine(daysInFeb);

// daysInFebLeap gets 29 because the year 1996 was a leap year.
int daysInFebLeap = System.DateTime.DaysInMonth(1996, Feb);
Console.WriteLine(daysInFebLeap);

DateTime.AddYears (Int32)

dateTime 객체에 연도를 추가합니다.

DateTime baseDate = new DateTime(2000, 2, 29);
Console.WriteLine("Base Date: {0:d}\n", baseDate);

// Show dates of previous fifteen years.
for (int ctr = -1; ctr >= -15; ctr--)
   Console.WriteLine("{0,2} year(s) ago:{1:d}", 
                      Math.Abs(ctr), baseDate.AddYears(ctr));

Console.WriteLine();

// Show dates of next fifteen years.
for (int ctr = 1; ctr <= 15; ctr++)
   Console.WriteLine("{0,2} year(s) from now: {1:d}", 
                     ctr, baseDate.AddYears(ctr));

DateTime을 다룰 때의 순수한 함수 경고

Wikipedia는 현재 다음과 같이 순수 함수를 정의합니다.

  1. 이 함수는 항상 동일한 인수 값을 사용하여 동일한 결과 값을 평가합니다. 함수 결과 값은 프로그램 실행이 진행되는 동안이나 프로그램의 다른 실행 사이에서 변경 될 수있는 숨겨진 정보 나 상태에 의존 할 수 없으며 I / O 장치의 외부 입력에 의존 할 수도 없습니다.
  2. 결과를 평가해도 의미 적으로 관찰 가능한 부작용이나 출력이 발생하지 않습니다 (예 : 변경 가능한 객체의 변형 또는 I / O 장치로의 출력).

개발자는 순수한 방법을 알고 있어야하며 많은 부분에서 이러한 문제를 비틀 거리게됩니다. 하나는 많은 중학교 개발자가 DateTime 클래스 메서드로 작업하는 것을 보았습니다. 이것들 중 많은 것들은 순수하고 당신이 이것들을 모른다면 당신은 놀랄 수 있습니다. 예 :

        DateTime sample = new DateTime(2016, 12, 25);
        sample.AddDays(1);
        Console.WriteLine(sample.ToShortDateString());

위의 예제를 감안할 때 콘솔에 인쇄 된 결과가 '26 / 12 / 2016 '이 될 것으로 예상 할 수 있지만 실제로는 같은 날짜가됩니다. 이는 AddDays가 순수한 메서드이므로 원래 날짜에 영향을 미치지 않기 때문입니다. 예상 출력을 얻으려면 다음과 같이 AddDays 호출을 수정해야합니다.

        sample = sample.AddDays(1);

DateTime.Parse (String)

// Converts the string representation of a date and time to its DateTime equivalent

var dateTime = DateTime.Parse("14:23 22 Jul 2016");

Console.WriteLine(dateTime.ToString());

DateTime.TryParse (String, DateTime)

// Converts the specified string representation of a date and time to its DateTime equivalent and returns a value that indicates whether the conversion succeeded

string[] dateTimeStrings = new []{
    "14:23 22 Jul 2016",
    "99:23 2x Jul 2016",
    "22/7/2016 14:23:00"
};

foreach(var dateTimeString in dateTimeStrings){

    DateTime dateTime;
    
    bool wasParsed = DateTime.TryParse(dateTimeString, out dateTime);
    
    string result = dateTimeString +
        (wasParsed 
            ? $"was parsed to {dateTime}" 
            : "can't be parsed to DateTime");
            
    Console.WriteLine(result);
}

문화 정보와 파스 및 TryParse

네델란드 날짜의 예제 구문 분석에 따라 다른 문화권 (언어)의 DateTimes를 파싱 할 때이 함수를 사용할 수 있습니다.

DateTime dateResult;
var dutchDateString = "31 oktober 1999 04:20";
var dutchCulture = CultureInfo.CreateSpecificCulture("nl-NL");
DateTime.TryParse(dutchDateString, dutchCulture, styles, out dateResult);
// output {31/10/1999 04:20:00}

파싱의 예 :

DateTime.Parse(dutchDateString, dutchCulture)
// output {31/10/1999 04:20:00}

for-loop에서의 이니셜 라이저로서의 DateTime

// This iterates through a range between two DateTimes 
// with the given iterator (any of the Add methods) 

DateTime start = new DateTime(2016, 01, 01);
DateTime until = new DateTime(2016, 02, 01);

// NOTICE: As the add methods return a new DateTime you have
// to overwrite dt in the iterator like dt = dt.Add()
for (DateTime dt = start; dt < until; dt = dt.AddDays(1))
{
    Console.WriteLine("Added {0} days. Resulting DateTime: {1}", 
                      (dt - start).Days, dt.ToString());
}

TimeSpan 반복은 같은 방식으로 작동합니다.

DateTime ToString, ToShortDateString, ToLongDateString 및 ToString 형식

using System;
                    
public class Program
{
    public static void Main()
    {
        var date = new DateTime(2016,12,31);
        
        Console.WriteLine(date.ToString());        //Outputs: 12/31/2016 12:00:00 AM
        Console.WriteLine(date.ToShortDateString()); //Outputs: 12/31/2016
        Console.WriteLine(date.ToLongDateString()); //Outputs: Saturday, December 31, 2016
        Console.WriteLine(date.ToString("dd/MM/yyyy"));    //Outputs: 31/12/2016
    }
}

현재 날짜

현재 날짜를 가져 오려면 DateTime.Today 속성을 사용합니다. 오늘 날짜가있는 DateTime 객체를 반환합니다. 이 값을 .ToString() 변환하면 기본적으로 시스템의 로컬 환경에서 수행됩니다.

예 :

Console.WriteLine(DateTime.Today);

오늘 날짜를 로컬 형식으로 콘솔에 씁니다.

DateTime 포매팅

표준 DateTime 형식

DateTimeFormatInfo는 간단한 날짜 및 시간 형식 지정을위한 지정자 집합을 지정합니다. 모든 지정자는 특정 DateTimeFormatInfo 형식 패턴에 해당합니다.

//Create datetime
DateTime dt = new DateTime(2016,08,01,18,50,23,230);

var t = String.Format("{0:t}", dt); // "6:50 PM"                             ShortTime
var d = String.Format("{0:d}", dt); // "8/1/2016"                            ShortDate
var T = String.Format("{0:T}", dt); // "6:50:23 PM"                          LongTime
var D = String.Format("{0:D}", dt); // "Monday, August 1, 2016"              LongDate
var f = String.Format("{0:f}", dt); // "Monday, August 1, 2016 6:50 PM"      LongDate+ShortTime
var F = String.Format("{0:F}", dt); // "Monday, August 1, 2016 6:50:23 PM"   FullDateTime
var g = String.Format("{0:g}", dt); // "8/1/2016 6:50 PM"                    ShortDate+ShortTime
var G = String.Format("{0:G}", dt); // "8/1/2016 6:50:23 PM"                 ShortDate+LongTime
var m = String.Format("{0:m}", dt); // "August 1"                            MonthDay
var y = String.Format("{0:y}", dt); // "August 2016"                         YearMonth
var r = String.Format("{0:r}", dt); // "SMon, 01 Aug 2016 18:50:23 GMT"      RFC1123
var s = String.Format("{0:s}", dt); // "2016-08-01T18:50:23"                 SortableDateTime
var u = String.Format("{0:u}", dt); // "2016-08-01 18:50:23Z"                UniversalSortableDateTime

사용자 지정 날짜 시간 서식 지정

다음과 같은 사용자 지정 형식 지정자가 있습니다.

  • y (년)
  • M (월)
  • d (일)
  • h (시간 12)
  • H (24 시간)
  • m (분)
  • s (초)
  • f (두 번째 부분)
  • F (두 번째 부분, 후행 0은 다듬어 짐)
  • t (PM 또는 AM)
  • z (시간대).
var year =       String.Format("{0:y yy yyy yyyy}", dt); // "16 16 2016 2016"  year
var month =      String.Format("{0:M MM MMM MMMM}", dt); // "8 08 Aug August"  month
var day =        String.Format("{0:d dd ddd dddd}", dt); // "1 01 Mon Monday"  day
var hour =       String.Format("{0:h hh H HH}",     dt); // "6 06 18 18"       hour 12/24
var minute =     String.Format("{0:m mm}",          dt); // "50 50"            minute
var secound =    String.Format("{0:s ss}",          dt); // "23 23"            second
var fraction =   String.Format("{0:f ff fff ffff}", dt); // "2 23 230 2300"    sec.fraction
var fraction2 =  String.Format("{0:F FF FFF FFFF}", dt); // "2 23 23 23"       without zeroes
var period =     String.Format("{0:t tt}",          dt); // "P PM"             A.M. or P.M.
var zone =       String.Format("{0:z zz zzz}",      dt); // "+0 +00 +00:00"    time zone

날짜 분리 기호 / (슬래시)와 시간 sepatator : 콜론)을 사용할 수도 있습니다.

코드 예제

자세한 내용은 MSDN을 참조하십시오.

DateTime.ParseExact (String, String, IFormatProvider)

지정된 형식 및 culture 별 형식 정보를 사용하여 날짜 및 시간의 지정된 문자열 표현을 해당하는 DateTime으로 변환합니다. 문자열 표현의 형식은 지정된 형식과 정확하게 일치해야합니다.

특정 형식 문자열을 동등한 DateTime으로 변환

culture 별 DateTime 문자열 08-07-2016 11:30:12 PMMM-dd-yyyy hh:mm:ss tt 형식이라고 가정하고 동등한 DateTime 객체로 변환하려고합니다

string str = "08-07-2016 11:30:12 PM";
DateTime date = DateTime.ParseExact(str, "MM-dd-yyyy hh:mm:ss tt", CultureInfo.CurrentCulture);

특정 문화권 형식이없는 동등한 DateTime 객체로 날짜 시간 문자열 변환

dd-MM-yy hh:mm:ss tt 형식의 DateTime 문자열이 있고 특정 문화권 정보없이 동등한 DateTime 객체로 변환하려고한다고 가정 해 보겠습니다.

string str = "17-06-16 11:30:12 PM";
DateTime date = DateTime.ParseExact(str, "dd-MM-yy hh:mm:ss tt", CultureInfo.InvariantCulture);

날짜 형식 문자열을 형식이 다른 특정 문화권 형식이없는 동등한 DateTime 객체로 변환

예를 들어, '23 -12-2016 '또는 '12 / 23 / 2016'과 같은 날짜 문자열이 있고이를 특정 문화권 정보없이 동등한 DateTime 객체로 변환하려고한다고 가정 해 보겠습니다.

   string date =  '23-12-2016' or date = 12/23/2016';
   string[] formats = new string[] {"dd-MM-yyyy","MM/dd/yyyy"}; // even can add more possible formats.
   DateTime date = DateTime.ParseExact(date,formats, CultureInfo.InvariantCulture,DateTimeStyles.None);

참고 : CultureInfo 클래스에 System.Globalization 을 추가해야합니다.

DateTime.TryParseExact (문자열, 문자열, IFormatProvider, DateTimeStyles, DateTime)

지정된 형식, 문화권 별 형식 정보 및 스타일을 사용하여 날짜 및 시간의 지정된 문자열 표현을 해당하는 DateTime으로 변환합니다. 문자열 표현의 형식은 지정된 형식과 정확하게 일치해야합니다. 이 메서드는 변환이 성공했는지 여부를 나타내는 값을 반환합니다.

예를 들어

CultureInfo enUS = new CultureInfo("en-US");
string dateString;
System.DateTime dateValue;

스타일 플래그가없는 날짜를 구문 분석합니다.

dateString = " 5/01/2009 8:30 AM";
if (DateTime.TryParseExact(dateString, "g", enUS, DateTimeStyles.None, out dateValue))
{
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}


// Allow a leading space in the date string.
if(DateTime.TryParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite, out dateValue))
{
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

M 및 MM의 사용자 지정 형식을 사용하십시오.

dateString = "5/01/2009 09:00";
if(DateTime.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None, out dateValue))
{
    Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

// Allow a leading space in the date string.
if(DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None, out dateValue))
{
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

표준 시간대 정보로 문자열을 구문 분석하십시오.

dateString = "05/01/2009 01:30:42 PM -05:00";
if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None, out dateValue))
{
    Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}


// Allow a leading space in the date string.
if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.AdjustToUniversal, out dateValue))
{
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

UTC represengting 문자열을 파싱합니다.

dateString = "2008-06-11T16:11:20.0904778Z";
if(DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
{
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
  Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out dateValue))
{
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind);
}
else
{
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

출력

' 5/01/2009 8:30 AM' is not in an acceptable format.
Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
'5/01/2009 09:00' is not in an acceptable format.
Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow