从DateTime中只获取日期而不包含时间
本文关键字:包含 时间 取日期 获取 DateTime | 更新日期: 2023-09-27 17:49:22
我遇到了一种情况,我只需要从DateTime
中获得Date
。
我有一个DateTime? StartDate
属性(Nullable
)用于保存日期值
i tried below
var d = Convert.ToDateTime(StartDate).Date;
但是它返回我d作为eg。6/22/2006 12:00:00AM
做var d = Convert.ToDateTime(StartDate).Date.ToString("d");
后
我能得到d作为6/22/2006
..但我不想把我的DateTime?
转换成String
他们有办法只得到Date
而不使用ToString("d")
吗?
使用Date属性获取DateTime实例的Date组件:
DateTime dateTimeNow = DateTime.Now;
DateTime datePartOnly = dateTimeNow.Date; // Return 00/00/0000 00:00:00
使用这种方法,Date属性将返回午夜的日期。因此,在本例中,时间部分将为00:00:00
。
有几种方法可以获得Date部分,但它的返回类型将是字符串:
1)。使用.ToString(string? format)
,其中format
可以是标准或自定义格式字符串
string dateOnlyString = dateTimeNow.ToString("dd/MM/yyyy");
//Can also use .ToString("dd-MM-yyyy");
2)。使用.ToShortDateString()
返回区域性敏感日期字符串
string dateOnlyString = dateTimeNow.ToShortDateString();
//Returns M/d/yyyy for "en-US" culture
//Returns yyyy/M/d for "ja-JP" culture
参考:这里。
试试这个:string x = DateTime.Now.ToShortDateString()
.
这将获得给定字符串x的日期dd/mm/yy。
我觉得你的问题有点…悬而未决。
你要求一个没有时间的日期,但是得到一个DateTime
,它两个都有。我真的不认为在大多数情况下这应该是一个问题:
如果您创建具有特定日期的DateTime
,并将其与另一个日期进行比较,并且这两个日期的时间都设置为午夜,则您的比较将是有效和正确的。如:
var yesterday = new DateTime(2014, 3, 10);
var today = new DateTime(2014, 3, 11);
var tomorrow = new DateTime(2014, 3, 12);
比较和排序这些将按照您的期望工作,以下也是如此:
if(today == DateTime.Today){
Console.WriteLine("Today is the day!");
}
换句话说,你应该完全可以假装时间部分不存在。
另外,正如你在OP中提到的,如果你想确保避免任何时间分量,你可以使用Date
属性:
// Note the addition of hours, minutes and seconds:
var today = new DateTime(2014, 3, 11, 14, 35, 33);
if(today == DateTime.Today){
Console.WriteLine("This never happened...");
}
if(today.Date == DateTime.Today){
Console.WriteLine("...But today is still the day!");
}
在c# 10中可以使用DateOnly。
DateOnly date = DateOnly.FromDateTime(DateTime.Now);
DateTime
确实有日期和时间。你可以自己决定在特定属性中不使用日期部分。它将只是12:00 AM
,但你不会使用它。
在某些情况下,编写自己的类型而不包含时间组件是很有用的。下面是开头:
struct Date : IFormattable
{
readonly DateTime value;
public Date(DateTime dateAndTime)
{
value = dateAndTime.Date;
}
public string ToString(string format, IFormatProvider formatProvider)
{
return value.ToString(format ?? "d", formatProvider);
}
public string ToString(string format)
{
return ToString(format, null);
}
public string ToString(IFormatProvider formatProvider)
{
return ToString(null, formatProvider);
}
public override string ToString()
{
return ToString(null, null);
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
}
字段value
确实持有12 AM的东西,但它是private
,不能从外面看到。ToString()
的重载确保除非有其他请求,否则Date
将以当前区域性的短日期格式输出。