Converting date to datetime - c#

I have a date in string form and input timeformat(ex: hh:mm tt). I want to convert date to dateime string. Below is my code :
string inputDate = "01/02/11";
string inputTimeFormat = "hh:mm tt";
Regex rgx1 = new Regex("tt");
string time1 = rgx1.Replace(inputTimeFormat, "AM");
Regex rgx = new Regex("[^ :AM]");
string time = rgx.Replace(time1, "0");
string dateTime = string.Format("{0} {1}", inputDate, time);
//output: 01/02/11 00:00 AM
Right now it is giving output in datetime string format, Is there any better way of doing the same?
EDIT: I need datetime in string format here and after that I can apply Datetime.TryParseExact

You're looking for the DateTime type:
DateTime.Parse("01/02/11").ToString("hh:mm tt")

DateTime.ParseExact('your date string', format, culture)
Am I missing something?

Related

Converting a String to DateTime with new format

How do you convert a string such as 13.11.2017 into a DateTime with that format 13/11/2017
I tried several ways but i didn't get solution .
string Arrival = Request.QueryString["Arrival"];//13.11.2017
DateTime datee = DateTime.ParseExact(Arrival , "dd/MM/yyyy", null);
here is updated code i split the string :
string Arrival = Request.QueryString["Arrival"];//13.11.2017
string year = Arrival.Split('.')[2];
string month = Arrival.Split('.')[1];
string day = Arrival.Split('.')[0];
string date = day + "/" + month + "/" + year;
DateTime datee = DateTime.ParseExact(date, "dd/MM/yyyy", null);
Observe:
// the input string
string inputString = "13.11.2017";
// parse the input string with a specific format to create a DateTime
DateTime dt = DateTime.ParseExact(inputString, "dd.MM.yyyy", CultureInfo.InvariantCulture);
// create a string from the DateTime using a different specific format
string outputString = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
// output the string
Console.WriteLine(outputString); // "13/11/2017"
Note that a DateTime itself does not have any particular format. A format only comes into play when going to or from a string.
Also note that by using the invariant culture here, we are avoiding any issues that may arise if the current culture was one that used different date separators or a different calendar system.
using System.Text.RegularExpressions;
string Arrival = Request.QueryString["Arrival"]; // 13.11.2017
string dateString = Regex.Replace(Arrival, #"\.", "/"); // 13/11/2017
DateTime date = DateTime.ParseExact(dateString , "dd/MM/yyyy", null); // 11/13/2017 00:00:00
Had the same problem with Russian locale.
Currently using ISO format everywhere to avoid incorrect DateTime understandings (like MM.dd when you mean dd.MM).
public static string ToIsoStr(this DateTime dateTime)
{
return dateTime.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
}
Your task will be solved with
return dateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

Split string on basis of "/"

I have a string:
string s = "1/09/2017 12:00:00 AM";
Output I want to show is 1/09/17 (basically short date).
And if
string s ="30/09/2017 12:00:00 AM"
Output I want to show is 30/09/17 (basically short date).
What I have tried is:
string[] values = s.Split('/');
string a = values[0]+"/"+values[1]+"/"+values[2].
I am confused how to get the 3rd part need help.
Use .NET built-in DateTime parsing.
For example:
string s = "1/09/2017 12:00:00 AM";
string format = "d/MM/yyyy hh:mm:ss tt";
DateTime parsedDateTime = DateTime.ParseExact(s, format, null);
string output = parsedDateTime.ToString("d/MM/yy"); //output = 1/09/17
More info:
DateTime.ParseExact method
DateTime.ToString method
My suggestion would be to use the inbuilt date datatype.
If that doesn't go with your requirement then I would suggest you to split the string based on the delimiter " "(blank space). Then pick the first part and proceed with your code.
You could use a substring like this
string s = "30/09/2017 12:00:00 AM";
string[] values = s.Split('/');
string a = values[0] + "/" + values[1] + "/" + values[2].Substring(2,2);
Adding to Paolo's anwer
string s = "1/09/2017 12:00:00 AM";
string format = "d/MM/yyyy hh:mm:ss tt";
DateTime parsedDateTime = DateTime.ParseExact(s, format, null);
string output = parsedDateTime.ToString("d/MM/yy");
string ss = output.Replace("-","/");
Console.Write(ss); //output is 1/09/17
This will exactly return the exact expected output
DateTime date = DateTime.ParseExact("1/09/2017 12:00:00 AM", "d/MM/yyyy hh:mm:ss tt", null);
Console.WriteLine(date.ToString("d/MM/yy"));
Convert your date string to DateTime and then use ToString overloaded method method with parameter Format Please find Fiddle

Reading date from string format

I have to read a date in this format in c#
yyyy/MM/dd HH:mm:ss
I cannot change the format because is written by another application
The date is a string like
2009/11/17 12.31.35
How i can read this format without parsing it(without split if possible)
thanks
I cannot change the format because is written by another application
Solution 1: You don't need to change the format for reading it.
Try This:
DateTime dt;
DateTime.TryParseExact(date, "yyyy/MM/dd HH.mm.ss",
CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
OR
How i can read this format without parsing it(without split if
possible)
Solution 2: If you want to extract the values from the date string.
Try This:
string str = "2009/11/17 12.31.35";
string year = str.Substring(0, 4); //2009
string month = str.Substring(5, 2); //11
string date = str.Substring(8, 2); //17
string Hours = str.Substring(11, 2); //12
string minutes = str.Substring(14, 2);//31
string seconds = str.Substring(17, 2);//35
Use DateTime.ParseExact, where you can supply your custom date format
Try replacing . with : an then ParseExtract
string dt= "2009/11/17 12.31.35";
var dt2= ss.Replace('.', ':');
DateTime d = DateTime.ParseExact(dt2, "yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);
or just
DateTime d = DateTime.ParseExact("2009/11/17 12.31.35", "yyyy/MM/dd HH.mm.ss", CultureInfo.InvariantCulture);

Parse C# string to hh:mm:ss

Given two strings
string date = "02Mar13";
string duration = "03.20min";
How do I parse them to DateTime and show them in the following format
string date = "02 March 2013";
string duration = "00:03:20";
I went through the list here but no one match my requirements.
You need to parse these using a Custom Date and Time format string, and output using one as well:
DateTime dt = DateTime.ParseExact(date + duration,
"ddMMMyymm.ss'min'",
CultureInfo.InvariantCulture);
string newDate = dt.ToString("dd MMMM yyyy");
string newDuration = dt.ToString("HH:mm:ss");
Things to note: I am using 'min' to represent the min literal in the string - this is part of custom format strings, allowing inner string literals.
string date = "02Mar13";
string duration = "03.20min";
DateTime newDate = DateTime.ParseExact(date + duration, "ddMMMyymm.ss\\min", null);
date = newDate.ToString("dd MMMM yyyy");
duration = newDate.ToString("hh:mm:ss");
How can produce the dateResult
string date = "02Mar13";
string duration = "03.20min";
var mat=Regex.Match(duration, "(.+?)min");
var dateResult = DateTime.ParseExact(date + mat.Groups[1].Value.Replace(".",":"), "ddMMMyyHH:mm", Thread.CurrentThread.CurrentCulture);
DateTime parsing is pretty much straightforward using DateTime.ParseExact:
DateTime.ParseExact(date, "ddMMMyy", null).ToString("dd MMMM yyyy"); // "02 March 2013"
As for the second part, if it is a duration semantically, then it is more suitable to use TimeSpan.ParseExact (although it required some fiddling with format strings):
TimeSpan.ParseExact(duration, "mm\\.ss'min'", null).ToString("hh\\:mm\\:ss"); // "00:03:20"

CONVERT MM/DD/YYYY HH:MI:SS AM/PM to DD/MM/YYYY in C#

How can I convert MM/DD/YYYY HH:MI:SS AM/PM into DD/MM/YYYY using C# ?I am using C#2008.
Thanks
Use TryParseExact to parse to a DateTime, then ToString with a format string to convert back...
DateTime dt;
if (DateTime.TryParseExact(value, "MM/dd/yyyy hh:mm:ss tt",
CultureInfo.InvariantCulture, DateTimeStyles.None,
out dt))
{
string text = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
// Use text
}
else
{
// Handle failure
}
As the time part is irrelevant, you can truncate that before parsing and re-formatting:
date = DateTime.ParseExact(date.Substring(0, 10), "MM'/'dd'/'yyyy", CultureInfo.InvariantCulture).ToString("dd'/'MM'/'yyyy");
Edit:
As your comment reveals that you don't want a string as result, you should not format the date into a string, just get the date as a DateTime value:
Datetime dbDate = DateTime.ParseExact(date.Substring(0, 10), "MM'/'dd'/'yyyy", CultureInfo.InvariantCulture);
Now you can use the DateTime value in your code, wrapping it in a database driver type if needed.
If this is a DateTime object, you should be able to just select a different format.
If it is a string, use the following:
public string convert(string date){
string[] pieces = date.Split("/");
string day = pieces[1];
string month = pieces[0];
string year = pieces[2].split(" ")[0];
return day + "/" + month + "/" + year;
}

Categories