2014-11-12 2 views
3

У меня есть строка времени как 12:48 AM. Я хочу преобразовать эту строку в TimeSpan, чтобы добавить с DateTime Объект. В настоящее время я пытаюсь использовать следующие фрагменты.Преобразование временной строки для добавления объекта DateTime

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); 

Пожалуйста, предложите мне, как конвертировать мой указанный строка во времени.

ответ

3

Вам нужно разобрать, что время в 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 
1

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; 
3

Вы можете разобрать его DateTime и использовать его TimeOfDay property, чтобы получить время:

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

Обратите внимание, что я также изменил формат строки, так как вам нужно tt для AM/PM целеуказателем.

1

Проверьте страницу из MSDN, это может помочь у

http://msdn.microsoft.com/en-us/library/dd992370(v=vs.110).aspx

+2

[Ответы, которые содержат только ссылки в других местах «хорошие ответы»?] (Http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers) –

1

Если вы хотите объект DATETIME

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

редактировать: если вы хотите добавить TimeSpan к данному объекту DateTime вы должны пропустить "AM/PM"

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

BR

Смежные вопросы