Converting a time string to append with DateTime object

1.3k views Asked by At

I have a time string as 12:48 AM. I want to convert this string into TimeSpan to append with DateTime Object. Currently I am trying the following snippets.

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;

I am getting

Input string was not in a correct format

exception at line

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

Please suggest me how to convert my specified string into time.

5

There are 5 answers

0
B.K. On BEST ANSWER

You need to parse that time into DateTime and then simply extract the TimeOfDay out of it when appending to the original date:

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

OUTPUT:

3/10/1987 12:00:00 AM
11/12/2014 12:48:00 AM
3/10/1987 12:48:00 AM
0
Soner Gönül On

12:48 AM is not a TimeSpan, it is a time part of a DateTime. You need to parse it to DateTime, not TimeSpan.

You can use to add .TimeOfDay property of your time and add it to date. This property returns only time part of your DateTime as a TimeSpan.

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

You can parse it to DateTime and use it's TimeOfDay property to get the time:

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

Note that i've also changed the format string since you need tt for the AM/PM designator.

1
Banusundar Arumugam On

Check this Page from MSDN, this could help u

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

0
Matthias On

If you want a DateTime object

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

edit: if you want to add a timespan to a given DateTime object you should skip the "AM/PM"

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

BR