Как удалить временную часть даты на С# только в объекте DateTime?

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

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

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

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

Ответ 1

Используйте свойство Date:

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

В переменной date будет указана дата, время будет 00:00:00.

Ответ 4

Посмотрите на свойство DateTime.Date.

Получает компонент даты этого экземпляра.

Ответ 5

Свойство 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);

Ответ 6

Ни один из вышеперечисленных ответов не разрешил мою проблему на winforms.

Самый простой способ достичь даты ТОЛЬКО - это простая функция в Datetime:

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

У вас будет только дата в строке дня рождения.

Ответ 7

Постарайтесь создать для себя собственную структуру. Объект DateTime будет иметь дату и время как

Ответ 8

Вы не можете. DateTime в .NET всегда имеет время, по умолчанию - 00: 00: 00: 000. Свойство Date для DateTime также является DateTime (!), Поэтому также имеет значение по умолчанию: 00: 00: 00: 000.

Это недостаток в .NET Framework, и можно утверждать, что DateTime в .NET нарушает принцип единой ответственности.

Ответ 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

Надежда помогает.

Ответ 11

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

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

Выход = 5/16/2015

Ответ 12

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

Ответ 13

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

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

См. MSDN

Ответ 14

Используйте 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

Ответ 15

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

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

Где dt - DateTime

Ответ 16

При попытке решить исходный Q столкнулся с этим сообщением.

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

С#:

DateTime Today = DateTime.Now;

ASPX:

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

Ответ 17

использовать

DateTime.Now.ToString("dd-MM-yyyy");

Ответ 18

по моему опыту ни один из упомянутых решений не работал, может быть, потому, что я хотел удалить время из извлеченной даты из базы данных, но код ниже работал нормально:

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

Ответ 19

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

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

Ответ 20

Объявите переменную как строку.

пример:

public string dateOfBirth ;

затем присвойте значение, подобное:

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

Ответ 21

Если вы преобразовываете его в строку, вы можете легко сделать это следующим образом.

Я принимаю дату как объект DateTime.

date.ToString("d");

Это даст вам только дату.

Ответ 22

Создайте структуру, которая содержит только те свойства, которые вы хотите. Затем метод расширения, чтобы легко получить эту структуру из экземпляра 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();

Ответ 23

Я знаю, что это старый пост с множеством ответов, но я не видел этого способа удаления временной части. Предположим, что у вас есть переменная DateTime, называемая myDate, с датой со временем. Вы можете создать из него новый объект DateTime без временной части, используя этот конструктор:

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

Вот так:

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

Таким образом вы создаете новый объект DateTime на основе старого, с 00:00:00 как часть времени.

Ответ 24

Чтобы получить только часть даты, используйте метод ToString(),

пример: DateTime.Now.Date.ToString("дд/мм/гггг")

Примечание: мм в формате дд/мм/гггг должен быть заглавным

Ответ 25

Использовать. Дата объекта DateTime будет игнорировать временную часть.

Вот код:

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

Ответ 26

Используйте немного RegEx:

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

Производит дату в формате: dd/mm/yyyy

Ответ 27

Для использования с помощью datalist, повторителя.. на странице aspx: <% # Eval ( "YourDateString" ). ToString(). Удалить (10)% >

Ответ 28

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();
}

Ответ 29

Это можно сделать следующим образом:

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

Ответ 30

Этот код дает вам четкое представление о записи 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);

Надеюсь, что это поможет.