C #에서 DateTime 개체의 날짜 부분 만 제거하는 방법은 무엇입니까?


458

날짜 시간의 시간 부분을 제거하거나 형식이 object아닌 형식으로 다음 형식의 날짜를 가지고 있어야합니다 string.

06/26/2009 00:00:00:000

string날짜 object형식이 필요하므로 변환 방법을 사용할 수 없습니다 .

내가 먼저 변환 시도 DateTimeA를 string, 그것에서 시간 특정 날짜를 제거하지만, 추가 12:00:00 AM최대한 빨리 다시 변환으로 DateTime object다시.


10
C #에는 날짜 전용 클래스 / 구조가 없습니다. 하나를 원한다면 자신 만의 클래스 / 구조를 추가해야합니다.
oleschri

12
간단히 DateTime.Now.ToShortDateString ()을 사용하십시오
Mohammad Shahnawaz Alam

@ShahnawazAalam 나는 여전히 문자열이라고 생각합니다. 날짜 시간에도 문제가 있습니다. datetime 변수의 날짜 만 필요

대안을 설명하는 이 답변 도 참조하십시오 .
Matt Johnson-Pint

var dateTime = DateTime.Now.Date;
PrathapG

답변:


826

Date 속성을 사용하십시오 .

var dateAndTime = DateTime.Now;
var date = dateAndTime.Date;

date변수는 날짜를 포함, 시간 부분이 될 것입니다 00:00:00.


36
질문자가 언급 한 시간 부분이 12:00:00 AM이 아닙니까?
FIre Panda

13
시간 부분은 0 (자정)입니다. AM / PM 형식을 사용하여 문자열 형식으로 지정하면 오전 12 시로 표시됩니다.
driis

98
이것은 질문에 대답하지 않습니다. 대답에서 알 수 있듯이 DateTime.Date (DateTime 자체)는 기본값이 00:00:00입니다. AsTime은 DateTime으로 할 수 없습니다. 자신의 구조를 구성하거나 Noda Time을 살펴보십시오.
Tomas Vinter

23
@TomasVinter가 정확합니다. .NET 프레임 워크에는 "엄격한 날짜"구조가 없습니다. 당신은 당신 자신을 만들어야합니다. 그러나 DateTime은 .ToShortDateTime () 메서드를 제공합니다.이 메서드는 값의 날짜 부분 만 나타내는 문자열을 형식화하고 현재 Culture (Thread.Current.CurrentCulture)에 구성된 DateFormat을 사용하여 날짜의 형식을 지정하므로 MM-dd -yyyy 미국, dd-MMM-yyyy EU 등
Michael J. Heier

16
이것이 정답이 아니라고 말하는 사람들에게 : 답은 맞지만 질문은 틀립니다. 질문자의 주제에 대한 무지를 표시합니다. 날짜 형식의 개체 형식이 없습니다. 형식은 문자열로 변환 될 때만 의미가 있습니다. 실제로 그의 객체에 저장된 것은입니다 06/26/2009 00:00:00.000. 그러나 (01/01/0001) 63381571200000000이후의 틱 수 DateTime.MinValue(1/100000000 초)입니다. 날짜를 표시하려면 날짜를 문자열로 변환하십시오. 그렇지 않으면 자정의 시간 구성 요소가 있습니다. 받아 들여.
CptRobby

165

형식 문자열을 사용하여 출력 문자열에 원하는 형식을 제공 할 수 있습니다.

DateTime dateAndTime = DateTime.Now;
Console.WriteLine(dateAndTime.ToString("dd/MM/yyyy")); // Will give you smth like 25/05/2011

사용자 정의 날짜 및 시간 형식 문자열 에 대해 자세히 알아보십시오 .


48
DateAndTime.ToShortDateString ();
John Peters

나는이 필요하지만, 사용 CultureInfo.DateTimeFormat.ShortDatePattern하기 쉬운 사용자로
드미트리 Lahoda을

이 형식을 사용하지 않는 로케일에서 잘못된 출력이 제공됩니다. 로케일을 인식하는 ToShortDateString을 사용하는 것이 좋습니다
Matt Wilko

1
dd/MM/yyyy이것을 사용하기 전에 형식 을 원하는 것으로 업데이트하십시오 !
slayernoah

.ToString()원하는 형식으로 정확히 필요한 것입니다. 감사합니다!
Willem Ellis


39

DateTime.Date 속성을 살펴보십시오 .

이 인스턴스의 날짜 구성 요소를 가져옵니다.


20
더 설명해야합니다. 이것은 답변이 아닙니다. 링크입니다
Malachi

27
@ Malachi : 사람들이 하이퍼 링크를 이해하지 못하는 경우를 대비하여 연결된 공식 API의 첫 번째 줄을 복사하여 붙여 넣었습니다.
Nick

var dateTime = DateTime.Now.Date;
PrathapG

29

Date숙박 시설은 자정에 날짜를 반환합니다.

한 가지 옵션은 개별 값 (일 / 월 / 년)을 별도로 가져 와서 원하는 유형으로 저장하는 것입니다.

var dateAndTime = DateTime.Now; 
int year = dateAndTime.Year;
int month = dateAndTime.Month;
int day = dateAndTime.Day;

string.Format("{0}/{1}/{2}", month, day, year);

20

위의 답변 중 어느 것도 winforms에서 내 문제를 해결하지 못했습니다.

날짜 도달하는 가장 쉬운 방법 은 Datetime의 간단한 기능입니다.

DateTime dt = DateTime.now;
String BirthDate = dt.ToShortDateString();

생일 문자열 만 날짜가됩니다.


4
(string)캐스트가 있습니까? 에 의해 반환되는 형식 ToShortDateString은 실제로 문자열입니다.
Askolein

15

이를 위해 자신의 구조를 만들어보십시오. DateTime 객체에는 날짜와 시간이 모두 있습니다


3
이것이 답이되어야합니다. 실제 질문에 대한 유일한 답변 인 것처럼 보입니다. 시간은 객체에서 제거 할 수 없습니다. 자신의 롤, 자정 (또는 하루 중 시간)과 함께 살거나 원하는 것을 ToString 표현으로 작업하십시오.
Phil Cooper

이것은 가장 정답 일 수도 있지만 생명력이 거의없는 사람들을 위해 완전히 학문적입니다. 바퀴 자체를 아주 멋지게 회전시키는 것을 좋아합니다. DateTime 구조체를 사용하여 긴 속성을 추가로 저장하는 데 사용되는 추가 메모리에 대해 정말로 걱정한다면 단순히 무시하는 것보다 더 큰 문제가 있습니다.
iGanja

답변 해주셔서 감사합니다. 구조체를 만들지 않고도 사용자는 대부분의 경우 문자열 변수를 사용할 수 있습니다. 어떻게 생각해?
Kushan Randima

@ KusanRandima, 이것은 대부분의 경우에 해당됩니다. 그러나 질문에서 사용자는 문자열 형식을 원하지 않으므로 이것을 대체물 중 하나로 제안했습니다.
Umesh CHILAKA

15

당신은 할 수 없습니다. .NET의 DateTime은 항상 시간이 00 : 00 : 00 : 000입니다. DateTime의 Date 속성도 DateTime (!)이므로 시간의 기본값은 00 : 00 : 00 : 000입니다.

이는 .NET Framework의 부족으로, .NET의 DateTime이 단일 책임 원칙을 위반한다고 주장 할 수 있습니다 .


이것이이 질문에 대한 정답입니다. DateTime 객체는 항상 Time을 갖습니다.
Drkawashima

1
관심이 없다면 왜 이것이 SRP 위반이라고 생각하십니까? 책임이 특정 시점을 나타내고 클래스가 기본 Ticks 속성을 노출한다고 생각하면 Year / Hour / Millisecond 속성은 순전히 (주류) 규칙을 처리합니다.
롭 교회

날짜와 시간은 서로 다른 개념이기 때문에 불행히도 .NET Framework에서는 동일한 구조로 번들로 제공됩니다. 따라서 구조에는 둘 이상의 책임 (날짜와 시간 모두 처리)이 있으므로 SRP를 위반합니다. .NET의 DateTime은 특정 시점뿐만 아니라 다른 많은 것들도 나타냅니다. 따라서 특정 시점 만 나타내는 책임을 고려하는 것은 이상합니다.
Tomas Vinter

2
특정 시점은 날짜와 시간으로 표시됩니다. 오후 1시에 누군가에게 당신을 만나라고 말하면, 그 날이 그 날을 알고 있다는 큰 가정을하고 있습니다. 오늘이 오늘이더라도 정밀도는 명시 적으로 명시되어 있습니다. 정확한 시점으로 특정 시점을 나타내는 단일 값은 반드시 기준 시작점을 사용하여 날짜와 시간을 모두 포함해야합니다. 그러므로 시작 참조에서 시작된 날짜 및 시작 참조에서 시작한 시간은 분명 동일 개념입니다. 추가 정밀도를 추가하는 시간.
iGanja

1
여러 인스턴스에 대해 이야기 할 때는 시간만으로도 유용합니다. 예 : 매일 UTC 자정 UTC; 매달 정오 현지 시간으로; TimeSpan은 컨벤션을 통해이를 나타낼 수 있지만 24 시간 내에 포인트와 시간대를 나타내는 Time 객체를 갖는 것이 더 깨끗할 수 있습니다. 궁극적으로 DateTime이 캡슐화하는 3 가지 아이디어 : Date, Time 및 TimeZone이 있습니다.
David Beckman

12

DateTime.Date

var newDate = DateTime.Now; //newDate.Date property is date portion of DateTime

9
더 설명해야합니다. 이것은 답변이 아닙니다 그것은 링크입니다
Malachi

2
var newDate = DateTime.Now; //newDate.Date 속성은 DateTime의 날짜 부분입니다. 불분명합니까? 확실하지 않은 경우-링크를 따르십시오.
VikciaR

10

다음은 다른 방법에 사용이String.Format

    DateTime todaysDate = DateTime.UtcNow;

    string dateString = String.Format("{0:dd/MM/yyyy}", todaysDate);

    Console.WriteLine("Date with Time: "+ todaysDate.ToString());

    Console.WriteLine("Date Only : " + dateString);

산출:

Date with Time: 9/4/2016 11:42:16 AM

Date Only : 04/09/2016

날짜 시간이 데이터베이스에 저장된 경우에도 작동합니다.

더 많은 날짜 및 시간 형식을 보려면 다음 링크를 확인하십시오.

참조 1

참조 2

희망이 도움이됩니다.


OP는 명시 적으로 "개체 형식의 날짜가 필요하므로 문자열 변환 방법을 사용할 수 없습니다"라고 명시하고 있습니다.
ChrisF

7

시간이없는 데이트 만하는이 방법

DateTime date = DateTime.Now;
string Strdateonly = date.ToString("d");

출력 = 2015 년 5 월 16 일


1
다른 답변과 분명히 다른 경우에만 늦은 답변을 추가 할 가치가 있습니다 (다른 사용자의 관점에서 투표). 여기서는 그렇지 않습니다.
m.cekiera

5

나는 DateOnly구조를 썼다 . 스킨에서 DateTime을 사용하지만 시간 부분이 공개적으로 노출되지는 않습니다.

using System;

public struct DateOnly : IComparable, IFormattable, IComparable<DateOnly>, IEquatable<DateOnly>
{

    private DateTime _dateValue;

    public int CompareTo(object obj)
    {
        if (obj == null)
        {
            return 1;
        }

        DateOnly otherDateOnly = (DateOnly)obj;
        if (otherDateOnly != null)
        {
            return ToDateTime().CompareTo(otherDateOnly.ToDateTime());
        }
        else
        {
            throw new ArgumentException("Object is not a DateOnly");
        }
    }

    int IComparable<DateOnly>.CompareTo(DateOnly other)
    {
        return this.CompareToOfT(other);
    }
    public int CompareToOfT(DateOnly other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == new DateOnly())
        {
            return 1;
        }
        return this.ToDateTime().CompareTo(other.ToDateTime());
    }

    bool IEquatable<DateOnly>.Equals(DateOnly other)
    {
        return this.EqualsOfT(other);
    }
    public bool EqualsOfT(DateOnly other)
    {
        if (other == new DateOnly())
        {
            return false;
        }

        if (this.Year == other.Year && this.Month == other.Month && this.Day == other.Day)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public static DateOnly Now()
    {
        return new DateOnly(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
    }

    public static bool TryParse(string s, ref DateOnly result)
    {
        DateTime dateValue = default(DateTime);
        if (DateTime.TryParse(s, out dateValue))
        {
            result = new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
            return true;
        }
        else
        {
            return false;
        }
    }

    public static DateOnly Parse(string s)
    {
        DateTime dateValue = default(DateTime);
        dateValue = DateTime.Parse(s);
        return new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
    }

    public static DateOnly ParseExact(string s, string format)
    {
        CultureInfo provider = CultureInfo.InvariantCulture;
        DateTime dateValue = default(DateTime);
        dateValue = DateTime.ParseExact(s, format, provider);
        return new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
    }

    public DateOnly(int yearValue, int monthValue, int dayValue) : this()
    {
        Year = yearValue;
        Month = monthValue;
        Day = dayValue;
    }

    public DateOnly AddDays(double value)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddDays(value);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DateOnly AddMonths(int months)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddMonths(months);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DateOnly AddYears(int years)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddYears(years);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DayOfWeek DayOfWeek
    {
        get
        {
            return _dateValue.DayOfWeek;
        }
    }

    public DateTime ToDateTime()
    {
        return _dateValue;
    }

    public int Year
    {
        get
        {
            return _dateValue.Year;
        }
        set
        {
            _dateValue = new DateTime(value, Month, Day);
        }
    }

    public int Month
    {
        get
        {
            return _dateValue.Month;
        }
        set
        {
            _dateValue = new DateTime(Year, value, Day);
        }
    }

    public int Day
    {
        get
        {
            return _dateValue.Day;
        }
        set
        {
            _dateValue = new DateTime(Year, Month, value);
        }
    }

    public static bool operator == (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() == aDateOnly2.ToDateTime());
    }

    public static bool operator != (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() != aDateOnly2.ToDateTime());
    }

    public static bool operator > (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() > aDateOnly2.ToDateTime());
    }

    public static bool operator < (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() < aDateOnly2.ToDateTime());
    }

    public static bool operator >= (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() >= aDateOnly2.ToDateTime());
    }

    public static bool operator <= (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() <= aDateOnly2.ToDateTime());
    }

    public static TimeSpan operator - (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() - aDateOnly2.ToDateTime());
    }


    public override string ToString()
    {
        return _dateValue.ToShortDateString();
    }

    public string ToString(string format)
    {
        return _dateValue.ToString(format);
    }

    public string ToString(string fmt, IFormatProvider provider)
    {
        return string.Format("{0:" + fmt + "}", _dateValue);
    }

    public string ToShortDateString()
    {
        return _dateValue.ToShortDateString();
    }

    public string ToDbFormat()
    {
        return string.Format("{0:yyyy-MM-dd}", _dateValue);
    }
}

이것은 VB.NET에서 변환되므로 일부 변환이 100 %가 아닌 경우 사과합니다


5

date.ToShortDateString ()을 사용하여 시간 구성 요소없이 날짜를 가져 오십시오.

var date = DateTime.Now
var shortDate = date.ToShortDateString() //will give you 16/01/2019

date.ToString ()을 사용하여 날짜 형식을 사용자 정의하십시오.

var date = DateTime.Now
var shortDate = date.ToString('dd-MMM-yyyy') //will give you 16-Jan-2019

4

아무도 DateTime을 언급하지 않은 것에 놀랐습니다.

var date = DateTime.Today;
// {7/1/2014 12:00:00 AM}

MSDN 참조


답이 올바른 속성으로 날짜를 생성하기 때문에 +1이지만 OP는 새 날짜를 만들지 않고 기존 날짜에서 시간을 제거하려고합니다.
iGanja

3

당신은 날짜 시간에서 유일한 날짜에 이것을 시도 할 수 있습니다

String.Format("{0:d/M/YYYY}",dt);

여기서 dt는 DateTime


3

원래 Q를 해결하려고 할 때이 게시물을 보았습니다.

Asp.Net을 사용하고 있으며 코드 뒤의 날짜 값에 바인딩 할 때 발견 한 몇 가지 조사 결과, 시간이 없어 화면에 표시되지 않을 수 있습니다.

씨#:

DateTime Today = DateTime.Now;

aspx :

<%: this.Today.ToShortDateString() %>


3

문자열로 변환하는 경우 다음과 같이 쉽게 할 수 있습니다.

DateTime 객체로 날짜를 사용하고 있습니다.

date.ToString("d");

이것은 당신에게 날짜 만 줄 것입니다.


2
string dt = myCalender.SelectedDate.ToString();
string date = dt.Remove(10);
displayDate.Content = date;

캘린더에서 날짜를 가져 오면 시간도 있습니다. 항상 필요한 것은 아닙니다. 이를 사용하여 날짜에서 시간을 제거 할 수 있습니다.


2

내 경험상 데이터베이스에서 추출 된 날짜에서 시간을 제거하고 싶었 기 때문에 위의 해결책 중 어느 것도 효과가 없었지만 아래 코드는 정상적으로 작동했습니다.

var date = target_date.Value.ToString("dd/MM/yyyy"); 

이 질문은 날짜가 문자열이 아닌 객체이어야한다고 명시했습니다. 이 솔루션은 문자열을 반환합니다.
saluce

2

변수를 문자열로 선언하십시오.

예 :

public string dateOfBirth ;

그런 다음과 같은 값을 지정하십시오.

dateOfBirth = ((DateTime)(datetimevaluefromDB)).ToShortDateString();

사람들은 질문을 읽고 아무 ​​이유없이 스택의 구조체를 힙의 객체로 변환하는 것을 중단해야합니다.
iGanja

2

나는 이것이 많은 답변을 가진 오래된 게시물이라는 것을 알고 있지만 시간 부분을 제거하는 이런 방법을 보지 못했습니다. 날짜가 시간 부분 인 DateTime이라는 변수 가 있다고 가정합니다 myDate. DateTime이 생성자를 사용하여 시간 부분없이 객체에서 새 객체를 만들 수 있습니다 .

public DateTime(int year, int month, int day);

이처럼 :

myDate = new DateTime(myDate.Year, myDate.Month, myDate.Day);

이렇게하면 DateTime시간 부분으로 00:00:00을 사용하여 이전 객체를 기반으로 새 객체 를 만들 수 있습니다 .


2

원하는 속성 만 보유한 구조체를 만듭니다. 그런 다음 DateTime 인스턴스에서 해당 구조체를 쉽게 가져올 수있는 확장 메서드입니다.

public struct DateOnly
{
    public int Day { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }
}

public static class DateOnlyExtensions
{
    public static DateOnly GetDateOnly(this DateTime dt)
    {
        return new DateOnly
        {
            Day = dt.Day,
            Month = dt.Month,
            Year = dt.Year
        };
    }
}

용법

DateTime dt = DateTime.Now;
DateOnly result = dt.GetDateOnly();

2

날짜 부분 만 가져 오려면 ToString () 메소드를 사용하십시오.

예 : DateTime.Now.Date.ToString ( "dd / MM / yyyy")

참고 : dd / MM / yyyy 형식의 mm은 대문자 여야합니다.


1

DateTime 개체의 .Date를 사용하면 시간 부분이 무시됩니다.

코드는 다음과 같습니다.

DateTime dateA = DateTime.Now;
DateTime dateB = DateTime.Now.AddHours(1).AddMinutes(10).AddSeconds(14);
Console.WriteLine("Date A: {0}",dateA.ToString("o"));
Console.WriteLine("Date B: {0}", dateB.ToString("o"));
Console.WriteLine(String.Format("Comparing objects A==B? {0}", dateA.Equals(dateB)));
Console.WriteLine(String.Format("Comparing ONLY Date property A==B? {0}", dateA.Date.Equals(dateB.Date)));
Console.ReadLine();

산출:

>Date A: 2014-09-04T07:53:14.6404013+02:00
>Date B: 2014-09-04T09:03:28.6414014+02:00
>Comparing objects A==B? False
>Comparing ONLY Date property A==B? True

1

약간의 RegEx를 사용하십시오.

Regex.Match(Date.Now.ToString(), @"^.*?(?= )");

dd / mm / yyyy 형식으로 날짜를 생성합니다.


1

aspx 페이지의 datalist, repeater ..를 사용하려면 <% # Eval ( "YourDateString"). ToString (). Remove (10) %>


1
static void Main(string[] args)
{
    string dateStrings =  "2014-09-01T03:00:00+00:00" ;

    DateTime convertedDate = DateTime.Parse(dateStrings);
    Console.WriteLine("  {0} ----------------- {1}",

    convertedDate,DateTime.Parse(convertedDate.ToString()).ToString("dd/MM/yyyy"));

    Console.Read();
}

1

이것은 다음과 같이 간단하게 수행 할 수 있습니다.

var dateOnly = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day)

1

이 코드는 당신에게 서면의 명확한보기를 제공 Date뿐만 아니라 Time별도

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00");
        string date = DateTime.Now.ToString("M-dd-yyyy");
        MessageBox.Show(date + "\n" + time);

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.