Как удалить временную часть даты в C# только в объекте DateTime?
мне нужно удалить временную часть времени даты или, вероятно, иметь дату в следующем формате в object форма не в форме string.
06/26/2009 00:00:00:000
Я не могу использовать любой string методы преобразования как мне нужна дата в object форма.
я попробовал сначала преобразовать DateTime до string, удалите из него конкретную дату времени, но он добавляет 12:00:00 AM как только я конвертирую его обратно в DateTimeobject снова.
30 ответов:
использовать дата свойства:
var dateAndTime = DateTime.Now; var date = dateAndTime.Date;The
dateпеременная будет содержать дату, часть времени будет00:00:00.
вы можете использовать строки формата, чтобы дать выходной строке формат, который вам нравится.
DateTime dateAndTime = DateTime.Now; Console.WriteLine(dateAndTime.ToString("dd/MM/yyyy")); // Will give you smth like 25/05/2011подробнее здесь.
используйте метод ToShortDateString. См. документацию http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx
var dateTimeNow = DateTime.Now; // Return 00/00/0000 00:00:00 var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000
посмотреть дата и время.Дата собственность.
возвращает компонент даты этого экземпляра.
The
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);
попробуйте сделать свою собственную структуру для этого. Объект DateTime будет иметь дату и время как
ни один из приведенных выше ответов не решил мою проблему на winforms.
самый простой способ добраться до только дата-это простая функция в Datetime:
DateTime dt = DateTime.now; String BirthDate = dt.ToShortDateString();у вас будет только дата в строке день рождения .
вы не можете. DateTime в .NET всегда есть время, по умолчанию до 00:00:00: 000. Дата свойство типа datetime тоже Датавремя (!), что время по умолчанию 00:00:00:000, а также.
это недостаток в .NET Framework, и можно утверждать, что DateTime в .NET нарушает Принцип Единой Ответственности.
этот способ получить только дату без времени
DateTime date = DateTime.Now; string Strdateonly = date.ToString("d");Output = 5/16/2015
здесь другой способ используя
String.FormatDateTime 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Это также работает, если дата время хранится в базе данных.
для получения дополнительной даты и времени форматирования проверьте эти ссылки:
надеюсь поможет.
Я удивлен, что никто не упомянул дату и время.Сегодня
var date = DateTime.Today; // {7/1/2014 12:00:00 AM}посмотреть MSDN
наткнулся на этот пост при попытке решить оригинальный Q.
Я использую Asp.Net и после некоторых исследований, которые я нашел, когда вы привязываетесь к значению даты в коде позади, вы можете отбросить время, чтобы оно не отображалось на экране.
C#:
DateTime Today = DateTime.Now;aspx:
<%: this.Today.ToShortDateString() %>
Я написал
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%
string dt = myCalender.SelectedDate.ToString(); string date = dt.Remove(10); displayDate.Content = date;Если вы берете дату из календаря, с этим мы также получаем время. Что не требуется все время. Используя это, мы можем удалить время из даты.
по моему опыту ни одно из указанных решений не работало, возможно, потому, что я хотел удалить время из извлеченной даты из базы данных, но приведенный ниже код работал нормально:
var date = target_date.Value.ToString("dd/MM/yyyy");
Вы можете попробовать это для единственной даты из Datetime
String.Format("{0:d/M/YYYY}",dt);где dt-это
DateTime
объявите переменную в виде строки.
пример :
public string dateOfBirth ;затем присвоить значение типа:
dateOfBirth = ((DateTime)(datetimevaluefromDB)).ToShortDateString();
Если вы преобразуете его в строку, вы можете легко сделать это так.
Я беру дату в качестве объекта DateTime.
date.ToString("d");Это даст вам только дату.
Я знаю, что это старый пост со многими ответами, но я не видел такого способа удаления части времени. Предположим, у вас есть
DateTimeпеременной называетсяmyDate, С дата С время. Вы можете создать новыйDateTimeобъект из него, без части времени, используя этот конструктор:public DateTime(int year, int month, int day);такой:
myDate = new DateTime(myDate.Year, myDate.Month, myDate.Day);таким образом, вы создаете новый
DateTimeобъект на основе старого, с 00:00:00 как раз часть.
создать структуру, которая содержит только нужные свойства. Затем метод расширения, чтобы легко получить эту структуру из экземпляра 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();
использовать .Дата объекта 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
используйте немного регулярных выражений:
Regex.Match(Date.Now.ToString(), @"^.*?(?= )");выдает дату в формате: ДД/ММ/гггг
Это можно было бы просто сделать так:
var dateOnly = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day)
получение
Dateчасть aDateTimeобъект не тренировался для меня, потому что я работаю на стороне клиента и возвращенные значения веб-службы имеют некоторыеnullдаты. В результате он пытается получить часть даты нулевого значения и создает исключение времени выполнения. Следующий пример, как я решил свою проблему:string dt = employer.BirthDay.ToString(); if(dt == ""){ dt = "N/A";} else dt = dt.Substring(0,10);
- получить значение DateTime в виде строки в строковую переменную.
- проверьте, если это null. Если null, назначьте строку переменная.
- если не null, получить первые 10 символов строки
DateTimeзначение и присвоить его переменной типа String.я делюсь этим для дальнейшего использования.
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(); }
этот код дает вам четкое представление о написании
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);надеюсь, что это помогает.
Comments