【问题标题】:Adding a Time to a DateTime in C#在 C# 中将时间添加到日期时间
【发布时间】:2017-06-28 17:38:46
【问题描述】:

我有一个日历和一个包含一天中时间的文本框。我想创建一个结合了两者的日期时间。我知道我可以通过查看小时和分钟然后将它们添加到日历 DateTime 来做到这一点,但这似乎相当混乱。

有没有更好的办法?

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    您可以使用DateTime.Add() 方法将时间添加到日期。

    DateTime date = DateTime.Now;
    TimeSpan time = new TimeSpan(36, 0, 0, 0);
    DateTime combined = date.Add(time);
    Console.WriteLine("{0:dddd}", combined);
    

    如果您需要这样做,您也可以通过 parsing a String 创建您的时间跨度。

    或者,您可以考虑使用其他控件。您没有提到您使用的是 winforms、wpf 还是 asp.net,但有各种日期和时间选择器控件支持选择日期和时间。

    【讨论】:

    • 几小时后我尝试了11:57 pm,这很有效:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
    • 如果您曾经处于有特定时间量的情况(例如:X 小时或 Y 分钟),则可以使用辅助函数,这样您就不必创建 TimeSpan() .例如:DateTime.UtcNow.AddSeconds(10); // 未来 10 秒的时间!
    • @SeanColombo 使用 ToShortTimeString() 获得的当前时间怎么样??
    【解决方案2】:

    如果您使用两个 DateTime 对象,一个用于存储日期,另一个用于存储时间,您可以执行以下操作:

    var date = new DateTime(2016,6,28);
    
    var time = new DateTime(1,1,1,13,13,13);
    
    var combinedDateTime = date.AddTicks(time.TimeOfDay.Ticks);
    

    可以在here找到一个例子

    【讨论】:

    • 正是我想要的
    【解决方案3】:

    根据您在文本框中输入日期的格式(和验证!),您可以这样做:

    TimeSpan time;
    
    if (TimeSpan.TryParse(textboxTime.Text, out time))
    {
       // calendarDate is the DateTime value of the calendar control
       calendarDate = calendarDate.Add(time);
    }
    else
    {
       // notify user about wrong date format
    }
    

    请注意,TimeSpan.TryParse 期望字符串采用 'hh:mm' 格式(可选秒数)。

    【讨论】:

      【解决方案4】:

      使用https://github.com/FluentDateTime/FluentDateTime

      DateTime dateTime = DateTime.Now;
      DateTime combined = dateTime + 36.Hours();
      Console.WriteLine(combined);
      

      【讨论】:

      • 我喜欢 FuentDateTime。如果这是您想要做的唯一日期时间总和,那么它可能不值得。但是,还有很多其他很棒的东西,比如找出下周五是什么时候。
      • @RichardGarside:你的意思是来自GitHub 的 FluentDateTime NuGet 包吗?
      • 它以 Nuget 包的形式提供。 Github页面上有链接。
      【解决方案5】:
         DateTime newDateTime = dtReceived.Value.Date.Add(TimeSpan.Parse(dtReceivedTime.Value.ToShortTimeString()));
      

      【讨论】:

      • 虽然这是一个正确的答案,但您应该向 OP 提供解释,而不是提供仅代码的答案,以确保他们(和任何其他观点)理解为什么答案是正确的..跨度>
      【解决方案6】:

      两者结合。 Date-Time-Picker 也支持选择时间。

      您只需要更改 Format-Property,也许还需要更改 CustomFormat-Property。

      【讨论】:

        猜你喜欢
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多