删除 DateTime 对象中的小时:秒:毫秒
Posted
技术标签:
【中文标题】删除 DateTime 对象中的小时:秒:毫秒【英文标题】:Remove hours:seconds:milliseconds in DateTime object 【发布时间】:2011-05-23 21:11:50 【问题描述】:我正在尝试从 DateTime 对象创建一个字符串,该对象产生格式 mm:dd:yyyy
。
通常DateTime
对象是mm:dd:yyyy hrs:min:sec AM/PM
。
有没有办法快速删除 DateTime 的 hrs:min:sec AM/PM
部分,这样当我转换它时 ToString()
它只会导致 mm:dd:yyyy
?
【问题讨论】:
知道你得到了一个正确的答案 :) 只是想提示你到这个页面:msdn.microsoft.com/en-us/library/az4se3k1(v=VS.100).aspx 这是我通常使用的日期格式的一个很好的资源:) 通常 DateTime 对象以 mm:dd:yyyy hrs:min:sec AM/PM 的形式出现。 - 不,它没有。如果这样做,那将是一个可怕的设计决定!我认为您忘记了 DateTime.ToString 的输出取决于您当前的文化。 【参考方案1】:要回答您的问题,不,您必须将其存储为不同的类型。最简单的选择是使用字符串。
string date = dateTime.ToString("MM:dd:yyyy");
不过,我也强烈建议不要在程序内部将日期存储为字符串。这将使对它们进行任何计算或比较变得困难。此外,我建议您不要为您的日期表示强制使用特定的文化,因为这意味着您的应用程序可能无法在您的其他文化中按预期工作。
稍微复杂一点的方法是创建一个覆盖 ToString 的自定义类。不过,我也会避免这种情况,因为将您的类型与标准库函数一起使用仍然很困难。您将不得不一直来回转换。
只需将其保留为 DateTime 并仅在表示层中转换为字符串。您可以使用DateTime.ToShortDateString
打印用户友好的文化感知字符串。
【讨论】:
OP 说他正在创建一个字符串,所以我认为你应该在你的回答中说是的:-D 我喜欢这个解决方案,因为我在查询外部网络服务时需要它作为字符串:) 不要试图将日期时间转换为字符串来操作它!这是一种糟糕的形式,并且比从其组件构建当前日期时间要慢得多。【参考方案2】:虽然在大多数情况下我同意 Mark Byers 的观点,但我也遇到过需要存储仅精确到小时的日期时间的情况。存储分钟和秒不仅是多余的,而且是不准确的。用户只需选择日期和小时,因此虽然日期和小时将由用户选择,但分钟和秒将设置为当前时间。
在这种情况下,删除分钟和秒非常容易。代码如下:
scheduledDate = scheduledDate.AddMinutes(
scheduledDate.Minute * -1).AddSeconds(
scheduledDate.Second * -1);
然后我将它作为完整的日期时间存储在数据库中,分钟和秒始终为 0。
【讨论】:
这可能是扁平化日期时间的最佳方式。【参考方案3】:datetime DateWithTimeNoSeconds =
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);
这将获取当前日期和时间的日期并添加小时和分钟。
【讨论】:
您应该只执行一次DateTime.Now
,将结果保存在一个变量中并使用该变量,否则您可能会构建一个休息一小时甚至一天的DateWithTimeNoSeconds
(如果使用在小时/天的轮到)。示例:var now = DateTime.Now; now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0);
【参考方案4】:
如果您想从DateTime
对象中删除小时、秒、毫秒(重置为0)而不转换为字符串,您可以使用Date
属性。
// Get date-only portion of date, without its time.
var date = DateTime.Now.Date;
msdn
【讨论】:
【参考方案5】:DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());
// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));
// The example displays the following output to the console:
// 6/1/2008 7:47:00 AM
// 6/1/2008
// 6/1/2008 12:00 AM
// 06/01/2008 00:00
http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx
【讨论】:
【参考方案6】:通常,我使用DateTime.ToShortDateString() 以Culture
感知的方式转换为字符串。
这样,您可以将其格式化为日期,仅尊重当前线程设置的区域性的当前格式。
【讨论】:
+1 表示DateTime.ToShortDateString()
。我只是在我的回答中写了这个,然后发现你也发布了完全相同的建议。
哇,153-er 的表现优于 100379-er。一定是我的幸运日:-)。谢谢!【参考方案7】:
关于DateTime.AddMinutes
(或秒或小时),如果您想删除而不是添加,只需添加一个负数!
【讨论】:
【参考方案8】:简单的方法,可能不是最好的,但是
DateTime dt = new DateTime();
dt = DateTime.Now;
string sdate = dt.ToShortDateString();
dt = DateTime.Parse(sdate);
简称
var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
【讨论】:
【参考方案9】:类似这样的日期和时间,没有秒数:
private DateTime _startTime;
public DateTime StartTime
get return _startTime;
set
_startTime = value.AddSeconds(-value.Second)
.AddMilliseconds(-value.Millisecond);
【讨论】:
【参考方案10】:你可以使用:
var newDate = new DateTime(oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0);
【讨论】:
以上是关于删除 DateTime 对象中的小时:秒:毫秒的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中格式化 DateTime?删除 DateTime 中的毫秒数?
js(javascript)取得当前时间小时,分钟,秒 以及毫秒
swift 从NSTimeInterval转换为swift中的小时,分钟,秒,毫秒 - 来自http://stackoverflow.com/questions/28872450/conversi