Format String to Datetime with Timezone - c#

I have a string s = "May 16, 2010 7:20:12 AM CDT that i want to convert into a DateTime object. In the code below i get a Date format cannot be converted error when attempting to parse the text with a known format.
timeStamp = matches[0].Groups[1].Value;
dt = DateTime.ParseExact(timeStamp, "MMM dd, yyyy H:mm:ss tt", null);
The timezone comes in as CDT UTC... and i think is whats causing the problem or my format?

Central Daylight Time
Try this:
string dts = "May 16, 2010 7:20:12 AM CDT";
DateTime dt =
DateTime.ParseExact(dts.Replace("CDT", "-05:00"), "MMM dd, yyyy H:mm:ss tt zzz", null);
EDIT:
For daylight savings time please consider DateTime.IsDaylightSavingTime and TimeZone.CurrentTimeZone
Custom Date and Time Format Strings

Make sure the DateTime is unambiguously DateTimeKind.Utc. Avoid "GMT", it is ambiguous for daylight saving.
var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
string s = dt.ToLocalTime().ToString("MMM dd, yyyy HH:mm:ss tt \"GMT\"zzz");
it's gives output : Dec 31, 2010 19:01:01 pm GMT-06:00
For more detail refer this Link

I convert my date string with timezone "Thu, 22 Sep 2022 06:38:58 +0200" using "ddd, dd MMM yyyy HH:mm:ss zzz":
var dateString = "Thu, 22 Sep 2022 06:38:58 +0200";
string[] acceptedDateFormats = { "ddd, dd MMM yyyy HH:mm:ss zzz" };
var dateParsed = DateTime.TryParseExact(dateString, acceptedDateFormats,
CultureInfo.InvariantCulture, DateTimeStyles.None, out var date);

Related

Convert string to DateTIme from specific format

I have the following string: Monday, April 20, 2020 at 9:11 AM,
How can I convert it into DateTime object?
What I'm trying:
DateTime myDate = DateTime.ParseExact(
"Monday, April 20, 2020 at 9:11 AM",
"yyyy-MM-dd HH:mm:ss,fff",
System.Globalization.CultureInfo.InvariantCulture);
But as except yyyy-MM-dd HH:mm:ss,fff not working to this format.
Any suggestions?
Try it here: https://dotnetfiddle.net/uBnqhz
DateTime myDate = DateTime.ParseExact("Monday, April 20, 2020 at 9:20 AM",
"dddd, MMMM dd, yyyy 'at' h:m tt",
System.Globalization.CultureInfo.InvariantCulture);
Please try to use the following format string: "dddd, MMMM d, yyyy 'at' h:mm tt".
Also, as suggested in the comments, documentation is your friend.
Here you go
DateTime myDate = DateTime.ParseExact("Monday, April 20, 2020 at 9:11 AM", "dddd, MMMM dd, yyyy 'at' h:mm tt", new System.Globalization.CultureInfo("en"));

DateTime.TryParseExact returning false for localized date

I am trying to parse a Dutch date from some logfiles but C# DateTime.TryParseExact is always returning false:
DateTime.TryParseExact("mei 21, 2015 12:25:35:719 AM", "MMM dd, yyyy hh:mm:ss:fff tt", new CultureInfo("nl-BE"), DateTimeStyles.None, out date)
Returns false; however I don't see what could be wrong with my date format?
However this returns true:
DateTime.TryParseExact("May 21, 2015 12:25:35:719 AM", "MMM dd, yyyy hh:mm:ss:fff tt", new CultureInfo("en-US"), DateTimeStyles.None, out date) true bool
So that would mean "nl-BE" does not know the word "mei", while en-US has no problem with "May". What can I do to overcome this?
It looks like that culture doesn't use an AM designator:
var culture = new CultureInfo("nl-BE");
Console.WriteLine("x{0}x", culture.DateTimeFormat.AMDesignator);
That prints xx, suggesting that the AM designator is empty.
You can modify this though:
var culture = (CultureInfo) new CultureInfo("nl-BE");
culture.DateTimeFormat.AMDesignator = "AM";
culture.DateTimeFormat.PMDesignator = "PM";
DateTime date;
var result = DateTime.TryParseExact("mei 21, 2015 12:25:35:719 AM",
"MMM dd, yyyy hh:mm:ss:fff tt",
culture,
DateTimeStyles.None, out date);
...
I found the same thing as Jon using a different method. It does round-trip, but no AM/PM designator is used in either direction -- the tt format field neither generates nor matches anything at all.
Test code:
DateTime date;
string fmt = "MMM dd, yyyy hh:mm:ss:fff tt";
Console.WriteLine(DateTime.TryParseExact("May 21, 2015 12:25:35:719 AM", fmt, new CultureInfo("en-US"), DateTimeStyles.None, out date));
CultureInfo dutch = new CultureInfo("nl-BE");
String s = date.ToString(fmt, dutch);
Console.WriteLine(s);
Console.WriteLine(DateTime.TryParseExact(s, fmt, dutch, DateTimeStyles.None, out date));
Output:
True
mei 21, 2015 12:25:35:719
True
In fact, the tt field is solidly broken in that locale, because it does change from a 24-hour to 12-hour clock, but with no differentiation whatsoever between the first and second half of the day.
Online compiler: http://rextester.com/UYR26148

Parsing a complicated string as DateTime

Can someone tell me how should I approach converting the following format to a proper DateTime object?
11:50:46 AM on Wednesday, October 19, 2011
string s = "11:50:46 AM on Wednesday, October 19, 2011";
DateTime dateTime = DateTime.ParseExact(s,
"hh:mm:ss tt on dddd, MMMM dd, yyyy", CultureInfo.InvariantCulture);

How to parse a string to DateTime

i have a string date in the following format
Thu Jan 5 19:58:58 2012
I need to parse this string to System.DateTime TimeReceived variable using DateTime.Parse() method.
Any one knows how to parse this string?
You could use the TryParseExact method which allows you to specify a format:
var str = "Thu Jan 5 19:58:58 2012";
DateTime date;
if (DateTime.TryParseExact(str, "ddd MMM d HH:mm:ss yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
// the date was successfully parsed, you could use the date variable here
Console.WriteLine("{0:HH:mm:ss dd/MMM/yy}", date);
}
if you look at the ParseExact function, about halfway there's
dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
so if you'd switch those around to match what you want, you'll end up with
CultureInfo provider = CultureInfo.InvariantCulture;
// Parse date and time with custom specifier.
dateString = "Thu 5 Jan 19:58:58 2012";
format = "ddd MMM dd hh:mm:ss yyyy";
try {
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
Console.WriteLine("{0} is not in the correct format.", dateString);
}
var reformatted = input.Substring(4, 17) + input.Substring(22);
return DateTime.Parse(reformatted);
That should work fine.

C# How to convert String into Time and Date format?

I have a short program which converts a string to both date and time format from a simple string.
However it seems that the String is not recorgnizable for the system to be converted into date time format due to the sequence of the string. The String that should be converted is an example like : "Thu Dec 9 05:12:42 2010"
The method of Convert.ToDateTime have been used but does not work.
May someone please advise on the codes? Thanks!
String re = "Thu Dec 9 05:12:42 2010";
DateTime time = Convert.ToDateTime(re);
Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss"));
Take a look at DateTime.TryParseExact
DateTime time;
if (DateTime.TryParseExact(re,
"ddd MMM d hh:mm:ss yyyy", CultureInfo.CurrentCulture,
DateTimeStyles.None, out time)) {
Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss"));
} else {
Console.WriteLine("'{0}' is not in an acceptable format.", re);
}
It is often necessary to give it a hint about the specific pattern that you expect:
Edit: the double-space is a pain, as d doesn't handle that;
DateTime time = DateTime.ParseExact(re.Replace(" "," "),
"ddd MMM d hh:mm:ss yyyy", CultureInfo.CurrentCulture);
Take a look at DateTime.Parse
Try this
DateTime time = Convert.ToDateTime("2010, 9, 12, 05, 12, 42");
Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss"));
Not sure if the string input should have the double space but you could pull that out and use geoff's answer.
re = Regex.Replace(re, #"\s+", " ");
Other option is to adjust his match string accordingly.
DateTime time = DateTime.ParseExact(re, "ddd MMM d HH:mm:ss yyyy", CultureInfo.CurrentCulture);

Categories