【问题标题】:Converting a time string to append with DateTime object将时间字符串转换为附加 DateTime 对象
【发布时间】:2015-01-09 00:22:45
【问题描述】:

我有一个时间字符串12:48 AM。我想将此字符串转换为TimeSpan 以附加DateTime 对象。目前我正在尝试以下 sn-ps。

string format = "dd/MM/yyyy";
CultureInfo provider = CultureInfo.InvariantCulture;
var date = DateTime.ParseExact(dateValue, format, provider);

string timeFormate = "H:mm AM";
string timeValue = "12:48 AM";
var time = TimeSpan.ParseExact(timeValue,timeFormate,provider);
DateTime launchDate = date + time;

我来了

输入的字符串格式不正确

行异常

 var time = TimeSpan.ParseExact(timeValue,timeFormate,provider);

请建议我如何将我指定的字符串转换为时间。

【问题讨论】:

    标签: c# datetime timespan time-format


    【解决方案1】:

    您需要将该时间解析为DateTime,然后在附加到原始日期时简单地从中提取TimeOfDay

    using System;
    using System.Globalization;
    
    namespace Sample
    {
        class Program
        {
            static void Main(string[] args)
            {
                var dateValue = "10/03/1987";
                var date = DateTime.ParseExact(dateValue, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    
                var timeValue = "12:48 AM";
                var time = DateTime.ParseExact(timeValue, "h:mm tt", CultureInfo.InvariantCulture);
    
                var dateTime = date + time.TimeOfDay;
    
                Console.WriteLine(date);
                Console.WriteLine(time);
                Console.WriteLine(dateTime);
            }
        }
    }
    

    输出:

    3/10/1987 12:00:00 AM
    11/12/2014 12:48:00 AM
    3/10/1987 12:48:00 AM
    

    【讨论】:

      【解决方案2】:

      您可以将其解析为DateTime 并使用它的TimeOfDay property 来获取时间:

      DateTime time = DateTime.ParseExact("12:48 AM", "h:mm tt", CultureInfo.InvariantCulture);
      DateTime launchDate = date + time.TimeOfDay;
      

      请注意,我还更改了格式字符串,因为您需要 tt 作为 AM/PM 指示符。

      【讨论】:

        【解决方案3】:
        【解决方案4】:

        如果你想要一个 DateTime 对象

         string timeValue = "10:48 AM";
         string timeFormate = "h:mm tt";
         var dateTime = DateTime.ParseExact(timeValue, timeFormate, CultureInfo.InvariantCulture);
        

        编辑: 如果您想为给定的 DateTime 对象添加时间跨度,您应该跳过“AM/PM”

        string timeValue = "2:30";
        DateTime launchTime = DateTime.Now;
        TimeSpan timeSpan;
        if (TimeSpan.TryParse(timeValue, out timeSpan))
        {
           launchTime = launchTime.Add(timeSpan);
        }
        

        BR

        【讨论】:

          【解决方案5】:

          12:48 AM 不是TimeSpan,它是DateTime 的时间部分。您需要将其解析为DateTime,而不是TimeSpan

          您可以使用.TimeOfDay property添加您的时间并将其添加到date。此属性仅将您的DateTime 的时间部分作为TimeSpan 返回。

          string timeValue = "12:48 AM";
          var time = DateTime.ParseExact(timeValue, "h:mm tt", CultureInfo.InvariantCulture);
          DateTime launchDate = date + time.TimeOfDay;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-13
            • 2013-11-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多