C# How to DateTimeOffset.Parse 2022003023T05:57:44.200Z? - c#

I tried DateTimeOffset dto = DateTime.ParseExact("2022003023T05:57:44.200Z", "yyyyMMMMdd'T'HH':'mm':'ss'.'fff'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); but to no avail: 'String '2022003023T05:57:44.200Z' was not recognized as a valid DateTime.'

(Would be a mess as a comment)
If those extra 0's were typos for separators (2022/03/23T05:57:44.200Z being the real value), then:
void Main()
{
string s = "2022003023T05:57:44.200Z";
var ss = s.ToCharArray();
ss[4] = '/';
ss[7] = '/';
var dt = new string(ss);
DateTimeOffset dto = DateTime.Parse(dt);
Console.WriteLine(dto);
}

Related

Convert string to DateTime using special format

How can I convert this string to a DateTime:
string t = "2017-02-20 13h24m18s";
The format is: XXXX-XX-XX XXhXXmXXs
You could use DateTime.TryParseExact to parse the string using a specific format:
string t = "2017-02-20 13h24m18s";
if(DateTime.TryParseExact(t, #"yyyy-MM-dd HH\hmm\mss\s", CultureInfo.InvariantCulture,
DateTimeStyles.None, out var dt))
{
// parsed successfully into dt
}
Just be sure to escape 13h as HH\h, 24m as mm\m and 18s as ss\s.
You can replace values easily before converting
static public DateTime todate(string t)
{
t = t.Replace("h", ":");
t = t.Replace("m", ":");
t = t.Replace("s", "");
return DateTime.Parse(t);
}
now use
string test = "2017-02-20 13h2m18s";
DateTime a = todate(test);

How to get a datetime value within a string?

I've got a string that contains a value of datetime:
string myStr = "= '2015-12-01 00:00:00.000'";
How can I check if myStr contains a datetime value?
How can I get only the datetime value from myStr? The datetime value got from myStr should be: "2015-12-01 00:00:00.000".
The sample code that I have tried to do the task:
string myStr = "= '2015-12-01 00:00:00.000'";
Regex rgx = new Regex(#"\d{2}-\d{2}-\d{4}");
Match mat = rgx.Match(myStr);
if (mat.ToString() != "") //This will check if string contains datetime value
{
DateTime myDateTime = DateTime.Parse(mat.ToString()); //This will get the datetime value from string
}
Note: The result from the sample code above is: It can't check if myStr contains a datetime value. It can't get the datetime value from myStr.
You could help me to check if a string contains a datetime value, and get the datetime value within a string.
Try this
var myStr = "= '2015-12-01 00:00:00.000'";
var match = Regex.Matches(myStr, #"'(.*?)'")[0].Groups[1].Value;
DateTime result;
if (DateTime.TryParse(match.ToString(), out result)) {
// Your string has a valid DateTime and it is parsed in result
}
else {
// Invalid
}
There are two things we need to do:
Write a regex which get things that look like they might be a date. However, since dates can be exceedingly complex, we want to delegate that validation to the built-in DateTime library.
For each possible match, we want to validate that it's actually a date.
private IEnumerable<DateTime> GetDates(string str)
{
var dateSearcherRegex = new Regex(#"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}");
foreach (Match match in dateSearcherRegex.Matches(str))
{
var matchedString = match.Groups[0].Value;
DateTime date;
if (DateTime.TryParseExact(matchedString, "yyyy-MM-dd hh:mm:ss.fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
yield return date;
}
}
}
And using it like this:
string myStr = "= '2015-12-01 00:00:00.000'";
var dates = GetDates(myStr);
string myStr = "= '2015-12-01 00:00:00.000'";
DateTime dt;
bool b = DateTime.TryParse(myStr.Split(' ')[1].Replace("'",string.Empty),out dt);
if (b)
{
Console.WriteLine("contains datetime");
}
else
{
Console.WriteLine("doesn't contain datetime");
}
Use TryParse function to check for DateTime values
If you still want using regex to parse the date:
Regex rgx = new Regex(#"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}");
Match result = rgx.Match(myStr);
if (mat.Success)
{
DateTime myDateTime = DateTime.ParseExact(m.Value, "yyyy-MM-dd hh:mm:ss.fff", CultureInfo.InvariantCulture);
}
CMIIW.

Retrieve DateTime objects from a certain string

I have the following string:
"23/09/2015 08:00\r\n עד\r\n24/09/2015 08:00"
As you can see, we have two dates. One before the first \r\n and the other one after the second \r\n.
How can I retrieve DateTime objects from this string in C#? The only way I know is to use Substring but that retrieves the text after the first \r\n.
This may help
var stringValue = "23/09/2015 08:00\r\n עד\r\n24/09/2015 08:00";
var splitted = stringValue.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries);
var firstStringDate = splitted[0];
var secondStringDate = splitted[2];
And to get the DateTime:
var firstDate = DateTime.ParseExact(splitted[0], "dd/MM/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo);
var secondDate = DateTime.ParseExact(splitted[2], "dd/MM/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo);
Split and TryParse the strings:
static IEnumerable<DateTime> extractDates(string inputString)
{
foreach (var item in inputString.Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries))
{
DateTime dt;
if(DateTime.TryParseExact(item,
"dd/MM/yyyy HH:mm",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out dt))
yield return dt;
}
}
I would use myString.Split("\r\n") like so:
string[] dates = myString.Split("\r\n");
foreach (var dateString in dates)
{
DateTime dateTime;
if (DateTime.TryParse(dateString, out dateTime))
{
//Use dateTime here
}
}

Convert string to DateTime Format - wrong format

I really cannot make sense of why this does not want to work. I get an exception:
String was not recognized as a valid DateTime.
I am reading the string date from a file and looks like this 2/27/2014 10:10:55
This method receives the filename and extrapolates the data I need (latitude, longitude, date)
public void ReadCsvFile(string filename)
{
var reader = new StreamReader(File.OpenRead(filename));
gpsDataList = new List<GpsFileClass>();
while(!reader.EndOfStream){
var line = reader.ReadLine();
var values = line.Split(',');
if(values[2].Contains("A")){
values[2] = values[2].Substring(0,values[2].IndexOf("A"));
values[2].Replace("\"", "");
values[2] = values[2].Trim();
}
if(values[2].Contains("P")){
values[2] = values[2].Substring(0, values[2].IndexOf("P"));
values[2].Replace("\"", "");
values[2] = values[2].Trim();
}
gpsDataList.Add(new GpsFileClass(Convert.ToDouble(values[0]), Convert.ToDouble(values[1]), Convert.ToString(values[2])));
}
}
Once the I have the file data in a List<> I want to do some date comparisons and calculations. But first; I try to convert the string data containing date information to datetime like this:
public void SaveFrameGpsCoordinate()
{
int listSize = gpsDataList.Count;
DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo();
dateTimeFormatInfo.ShortDatePattern = "dd-MM-yyyy HH:mm:ss";
dateTimeFormatInfo.DateSeparator = "/";
//DateTime tempDateA = DateTime.ParseExact(gpsDataList[0].timeCaptured, "dd/MM/yyyy HH:mm:ss",null);
//DateTime tempDateB = DateTime.ParseExact(gpsDataList[lastRecordData].timeCaptured, "dd/MM/yyyy HH:mm:ss", null);
DateTime tempDateA = Convert.ToDateTime(gpsDataList[0].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
DateTime tempDateB = Convert.ToDateTime(gpsDataList[lastRecordData].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
}
As you can see even ParseExact throws the same exception, I tried it (hence commented it out).
There are a lot solutions for this kind of problem but non seem to work on mine. I get that DateTime by default uses en-US calture. But When I even when I change the culture to "af-ZA" I get the same exception.
Please help.
I don't believe it; The variable that holds the size of the List<> was going out of range (check line 3 of code below) but for some reason it did not throw an "out of range exception".
public void SaveFrameGpsCoordinate()
{
int listSize = gpsDataList.Count - 1;
DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo();
dateTimeFormatInfo.ShortDatePattern = "dd-MM-yyyy HH:mm:ss";
dateTimeFormatInfo.DateSeparator = "/";
//DateTime tempDateA = DateTime.ParseExact(gpsDataList[0].timeCaptured, "dd/MM/yyyy HH:mm:ss",null);
//DateTime tempDateB = DateTime.ParseExact(gpsDataList[lastRecordData].timeCaptured, "dd/MM/yyyy HH:mm:ss", null);
DateTime tempDateA = Convert.ToDateTime(gpsDataList[0].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
DateTime tempDateB = Convert.ToDateTime(gpsDataList[lastRecordData].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
}
You can use the ParseExact method
var dateTime = DateTime.ParseExact("2/27/2014 10:10:55",
"M/d/yyyy h:m:s", CultureInfo.InvariantCulture);
'dd' expects a 2 digit date. You probably want to use 'd' instead.
Similarly 'MM' expects a 2 digit month - again you probably want to use 'M' instead.
Source: http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

Convert string value to date from FormCollection

I get new Date(2012,9,3) from FormCollection["eventDate"]
how can I get this value in DateTime variable?
string input = "new Date(2012,9,3)";
var dateTimeString = input.Split(new[] {'(', ')'},
StringSplitOptions.RemoveEmptyEntries)
.Last();
var datetime = DateTime.ParseExact(dateTimeString,
"yyyy,M,d", CultureInfo.InvariantCulture);
One way would be like this:
// new Date(2012,9,3)
var dateVals = s.Substring(9).Replace(")", "").Split(",");
var d = new DateTime(
Convert.ToInt32(dateVals[0]),
Convert.ToInt32(dateVals[2]),
Convert.ToInt32(dateVals[1]));

Categories