C# Language
DateTime 메서드
수색…
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는 현재 다음과 같이 순수 함수를 정의합니다.
- 이 함수는 항상 동일한 인수 값을 사용하여 동일한 결과 값을 평가합니다. 함수 결과 값은 프로그램 실행이 진행되는 동안이나 프로그램의 다른 실행 사이에서 변경 될 수있는 숨겨진 정보 나 상태에 의존 할 수 없으며 I / O 장치의 외부 입력에 의존 할 수도 없습니다.
- 결과를 평가해도 의미 적으로 관찰 가능한 부작용이나 출력이 발생하지 않습니다 (예 : 변경 가능한 객체의 변형 또는 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 PM
이 MM-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).