Как удалить временную часть даты в C # только в объекте DateTime? - PullRequest
393 голосов
/ 25 мая 2011

Мне нужно удалить часть времени даты времени или, возможно, иметь дату в следующем формате в форме object, а не в форме string.

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

Я не могу использовать любые string методы преобразования, так как мне нужна дата в object форме.

Я сначала попытался преобразовать DateTime в string, удалить из него дату, относящуюся ко времени, но она добавляет 12:00:00 AM, как толькокогда я конвертирую его обратно в DateTime object обратно.

Ответы [ 37 ]

7 голосов
/ 16 мая 2015

Этот способ получения только даты без времени

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

Вывод = 5/16/2015

5 голосов
/ 22 апреля 2016

Я написал 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%

4 голосов
/ 16 января 2019

Используйте 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 голосов
/ 01 июля 2014

Я удивлен, что никто не упомянул DateTime.Today

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

См. MSDN

3 голосов
/ 27 ноября 2013

использование

DateTime.Now.ToString("dd-MM-yyyy");
3 голосов
/ 31 октября 2012

Вы можете попробовать это только для даты с даты / времени

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

Где dt это DateTime

3 голосов
/ 02 мая 2013

наткнулся на этот пост при попытке решить оригинальную Q.

Я использую Asp.Net и после некоторых исследований, которые я обнаружил, когда вы привязываетесь к значению даты в коде, вы можете сбросить время, чтобы оно не отображалось на экране.

C #:

DateTime Today = DateTime.Now;

ASPX:

<%: this.Today.ToShortDateString() %>
2 голосов
/ 24 декабря 2014

Я знаю, что это старый пост с множеством ответов, но я не видел этот способ удаления части времени. Предположим, у вас есть переменная 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 голосов
/ 17 декабря 2014

Создайте структуру, которая содержит только те свойства, которые вы хотите. Затем метод расширения, позволяющий легко получить эту структуру из экземпляра 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 голосов
/ 23 июля 2012
string dt = myCalender.SelectedDate.ToString();
string date = dt.Remove(10);
displayDate.Content = date;

Если вы берете дату из календаря, с этим мы также получаем время. Что не требуется все время. Используя это, мы можем удалить время с даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...