首页 文章

如何仅在DateTime对象中删除C#中的日期时间部分?

提问于
浏览
377

我需要删除日期时间的时间部分,或者可能在 object 表单中使用以下格式的日期,而不是 string 的形式 .

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

我不能使用任何 string 转换方法,因为我需要 object 形式的日期 .

我尝试首先将 DateTime 转换为 string ,从中删除特定时间的日期,但是一旦我将其再次转换回 DateTime object ,它就会添加 12:00:00 AM .

30 回答

  • 704

    使用Date属性:

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

    date 变量将包含日期,时间部分将为 00:00:00 .

  • 2

    根据我的经验,所述解决方案都没有用,可能是因为我想从数据库中提取日期中删除时间,但下面的代码工作正常:

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

    将变量声明为字符串 .

    例如:

    public string dateOfBirth ;
    

    然后分配一个值,如:

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

    如果要将其转换为字符串,则可以轻松地将其转换为字符串 .

    我将日期作为DateTime对象 .

    date.ToString("d");
    

    这只会给你一个日期 .

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

    如果你从日历上取日期,我们也有时间 . 这不是一直需要的 . 使用此我们可以删除日期 .

  • 3

    您可以使用格式字符串为输出字符串提供您喜欢的格式 .

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

    阅读更多here .

  • 2

    使用方法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
    
  • 1

    看看DateTime.Date属性 .

    获取此实例的日期组件 .

  • 2

    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);
    
  • 2

    上述答案都没有解决我在winforms上的问题 .

    达到 ONLY date的最简单方法是Datetime中的简单函数:

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

    您只有生日字符串中的日期 .

  • 13

    尝试为此制作自己的结构 . DateTime对象将具有日期和时间

  • 94

    你不能 . .NET中的DateTime始终有时间,默认为00:00:00:000 . DateTime的Date属性也是DateTime(!),因此时间默认为00:00:00:000 .

    这是.NET Framework中的一个短缺,可以说.NET中的DateTime违反了Single Responsibility Principle .

  • 9
  • 7

    这是 another method 使用 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);
    

    Output:

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

    如果日期时间存储在数据库中,这也适用 .

    有关更多日期和时间格式,请检查以下链接:

    Reference 1

    Reference 2

    希望有所帮助

  • 1

    这种方式只获得没有时间的日期

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

    输出= 2015年5月16日

  • 3

    我写了一个 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%,请道歉

  • 18

    我很惊讶没有人提到DateTime.Today

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

    MSDN

  • 2

    使用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
    
  • 1

    您可以尝试从Datetime的唯一日期

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

    其中dt是 DateTime

  • 4

    试图解决原始Q时遇到这篇文章 .

    我正在使用Asp.Net,经过一些研究后我发现当你绑定代码背后的日期值时,你可以减少时间,使其不会显示在屏幕上 .

    C#:

    DateTime Today = DateTime.Now;
    

    ASPX:

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

    使用

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

    我知道这是一篇有很多答案的老帖子,但我还没有看到这种删除时间部分的方法 . 假设您有一个名为 myDateDateTime 变量,其中包含带时间的日期部分 . 你可以使用这个构造函数从它创建一个新的 DateTime 对象,没有时间部分:

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

    像这样:

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

    这样,您可以基于旧对象创建新的 DateTime 对象,其中00:00:00作为时间部分 .

  • 5

    创建一个只包含所需属性的结构 . 然后是一个扩展方法,可以从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();
    
  • 36

    使用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

  • 14

    对于datalist,repeater ..在aspx页面中使用:<%#Eval(“YourDateString”) . ToString() . 删除(10)%>

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

    这可以通过这种方式完成:

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

    此代码为您提供了分别编写 DateTime 的清晰视图

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

    希望这可以帮助 .

  • 27

    获取 DateTime 对象的 Date 在客户端没有't workout for me because I' m,并且返回的Web服务值有一些 null 日期 . 因此,它尝试获取null值的Date部分,并抛出运行时异常 . 以下示例是我如何解决我的问题:

    string dt = employer.BirthDay.ToString();
    if(dt == ""){ dt = "N/A";}
    else dt = dt.Substring(0,10);
    
    • 将DateTime值作为字符串获取到字符串变量中 .

    • 检查它是否为空 . 如果为null,则指定字符串变量 .

    • 如果不为null,则获取字符串 DateTime 值的前10个字符,并将其分配给字符串变量 .

    我正在分享这个以供将来参考 .

相关问题