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

时间:2011-05-25 07:58:16

标签: c# datetime

我需要删除日期时间的时间部分,或者以object形式提供以下格式的日期,而不是string形式。

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

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

我首先尝试将DateTime转换为string,从中删除特定时间日期,但只要我将其转换回12:00:00 AM,就会添加DateTime object又回来了。

40 个答案:

答案 0 :(得分:716)

使用Date属性:

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

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

答案 1 :(得分:135)

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

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

了解更多here

答案 2 :(得分:97)

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

答案 3 :(得分:36)

查看DateTime.Date属性。

  

获取此实例的日期组件。

答案 4 :(得分:28)

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

答案 5 :(得分:19)

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

达到 ONLY 日期的最简单方法是日期时间中的简单功能:

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

生日字符串中只有日期。

答案 6 :(得分:14)

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

答案 7 :(得分:14)

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

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

答案 8 :(得分:11)

答案 9 :(得分: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

如果日期时间存储在数据库中,这也有效。

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

Reference 1

Reference 2

希望有所帮助。

答案 10 :(得分:7)

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

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

输出= 2015年5月16日

答案 11 :(得分:5)

最简单的方法是这样的,它只会返回日期:

var date = DateTime.Now.ToShortDateString();

答案 12 :(得分:5)

我写了一个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); } } 结构。这在皮肤下使用了DateTime,但没有时间部分公开暴露:

vendor

这是从VB.NET转换而来的,如果某些转换不是100%

,请道歉

答案 13 :(得分:4)

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

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

请参阅MSDN

答案 14 :(得分:4)

使用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 :(得分:3)

使用

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

答案 16 :(得分:3)

在尝试解决原始问题时遇到过这篇文章。

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

C#:

DateTime Today = DateTime.Now;

ASPX:

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

答案 17 :(得分:3)

您可以尝试从日期时间开始的唯一日期

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

其中dt是DateTime

答案 18 :(得分:2)

您可以在下面使用此简单代码。

代码:DateTime.Now.ToShortDateString();

例如 Console.WriteLine(DateTime.Now.ToShortDateString());

答案 19 :(得分:2)

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

DateTime

像这样:

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

这样您就可以根据旧对象创建一个新的myDate = new DateTime(myDate.Year, myDate.Month, myDate.Day); 对象,其中00:00:00为时间部分。

答案 20 :(得分: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();

答案 21 :(得分:2)

如果要将其转换为字符串,则可以轻松地执行此操作。

我将日期作为您的DateTime对象。

date.ToString("d");

这只会给你一个日期。

答案 22 :(得分:2)

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

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

答案 23 :(得分:2)

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

如果您从日历中选择日期,我们也会有时间。这不是一直需要的。使用此功能,我们可以从日期中删除时间。

答案 24 :(得分:2)

将变量声明为字符串。

示例:

public string dateOfBirth ;

然后分配一个值:

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

答案 25 :(得分: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();
}

答案 26 :(得分:1)

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

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

答案 27 :(得分:1)

此代码为您提供了分别编写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);

希望这有帮助。

答案 28 :(得分:1)

使用一点RegEx:

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

以格式生成日期:dd / mm / yyyy

答案 29 :(得分:1)

获取Date对象的DateTime部分并不适合我,因为我在客户端工作,并且返回的Web服务值有一些{{1 }} 日期。因此,它尝试获取null值的Date部分,并抛出运行时异常。以下示例是我如何解决我的问题:

null
  1. 将DateTime值作为字符串转换为字符串变量。
  2. 检查它是否为空。如果为null,则指定字符串变量。
  3. 如果不为null,请获取字符串string dt = employer.BirthDay.ToString(); if(dt == ""){ dt = "N/A";} else dt = dt.Substring(0,10); 值的前10个字符,并将其分配给字符串变量。
  4. 我分享这个以供将来参考。

答案 30 :(得分:1)

对于datalist,repeater ..在aspx页面中的使用:&lt;%#Eval(“YourDateString”)。ToString()。删除(10)%&gt;

答案 31 :(得分: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

答案 32 :(得分:1)

要只获取日期部分,请使用ToString()方法,

示例: DateTime.Now.Date.ToString(“ dd / MM / yyyy”)

注意: dd / MM / yyyy格式的mm必须大写

答案 33 :(得分:0)

Date 属性添加到 DateTime 变量

var dateTime = DateTime.Now
var onlyDate = dateTime.Date

或者您也可以使用 DataType 注释。

[DataType(DataType.Date)]
public DateTime dateTime {get; set;}

DataType 注释位于 System.ComponentModel.DataAnnotations 命名空间内。

答案 34 :(得分:0)

如果您想使用“绑定”并仅显示日期部分而不显示时间

ToolTip =“ {Binding TransactionModel.TransactionDate,StringFormat = d}”

答案 35 :(得分:0)

我想您会这样:DateTime onlyDate = DateTime.Today.Date; 或相同的DateTime onlyDate = yourDateTime.Date;  因此,请使用属性Date。

答案 36 :(得分:0)

试试这个,如果您使用DateTimeOffset,它还会处理时区

date1 = date1.LocalDateTime.Date;

如果您需要添加小时数,请使用此选项:

date1 = date1.LocalDateTime.Date;
date1 = date1.AddHours(23).AddMinutes(59).AddSeconds(59);

答案 37 :(得分:0)

如果您想从DateTime中删除部分时间,请尝试使用以下代码:

DateTime dt = new DateTime();

dt = DateTime.Now; //ex: 31/1/2017 6:30:20 PM

TimeSpan remainingTime = new TimeSpan(0, dt.Hour - 5, dt.Minute - 29, dt.Second - 19);
dt=dt.Add(remainingTime);

label1.Text = dt.ToString("HH:mm:ss"); // must be HH not hh

输出:01:01:01

答案 38 :(得分:0)

DateTime dd=DateTiem.Now;
string date=dd.toString("dd/MM/YYYY");

答案 39 :(得分:-1)

只需使用一行代码:

var dateAndTime = DateTime.Now.Date;