删除 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 对象中的小时:秒:毫秒的主要内容,如果未能解决你的问题,请参考以下文章

把毫秒换算成秒

python数据分析之:时间序列一

如何在 Flutter 中格式化 DateTime?删除 DateTime 中的毫秒数?

Python标准库datetime之time模块详解

js(javascript)取得当前时间小时,分钟,秒 以及毫秒

swift 从NSTimeInterval转换为swift中的小时,分​​钟,秒,毫秒 - 来自http://stackoverflow.com/questions/28872450/conversi