Convert string to DateTime using special format - c#

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

Related

Convert dd/mm/yyyy string to yyyy-dd-mm DateTime in c#

How do I convert 13/05/2019 (dd/mm/yyyy) string to 2019-13-05 (YYYY-dd-mm) DateTime Datatype in c#,sql sever Expects YYYY-dd-mm format datatype
string dateTime = "05/13/2019";
if (animalAdoption.AdoptionId != 0)
{
AnimalsAndBirdsAdoption animalsAndBirdsAdoption = new AnimalsAndBirdsAdoption()
{
AnimalsAndBirdsId = animalAdoption.AnimalId,
DonarDetailsId = userId,
Term = model.Term,
PeriodOfAdoption = dateTime,
isActive = true,
Amount = animalAdoption.amount
};
if (context.AnimalsAndBirdsAdoptions.Any(e => e.Id == animalAdoption.AdoptionId))
{
context.AnimalsAndBirdsAdoptions.Attach(animalsAndBirdsAdoption);
}
else
{
context.AnimalsAndBirdsAdoptions.Add(animalsAndBirdsAdoption);
}
}
this out-put I get
You can do it simply using below example with using your required format:
string dateTime = "05/13/2019";
CultureInfo provider = CultureInfo.InvariantCulture;
// It throws Argument null exception
DateTime dateTime10 = DateTime.ParseExact(dateTime, "yyyy/dd/mm", provider);
string dateTime = "13/05/2019";
var splittedDateTime = dateTime.Split('/');
DateTime myDate = new DateTime(int.Parse(splittedDateTime[2]), int.Parse(splittedDateTime[1]), int.Parse(splittedDateTime[0]));
To convert a UK date string to a DateTime
public DateTime? ToDateTime(string text)
{
DateTime? returnValue = null;
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-GB");
DateTime d = new DateTime();
if(DateTime.TryParse(text, cultureInfo, System.Globalization.DateTimeStyles.None, out d))
{
returnValue = d;
}
return returnValue;
}
To convert a DateTime to string yyyy-MM-dd:
public string ToBigEndianString(DateTime? date)
{
string returnValue = null;
if(date != null)
{
returnValue = date.Value.ToString("yyyy-MM-dd");
}
return returnValue;
}
Then you can put them together:
public string ToBigEndianString(string ukDate)
{
DateTime? d = ToDateTime(ukDate);
return ToBigEndianString(d);
}
But you could pass in a DateTime to a SQL stored procedure.
https://learn.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlparametercollection.addwithvalue?view=netframework-4.8
Change the datatype of PeriodOfAdoption to Type System.DateTime
and then you can initialise the property using the DateTime constructor which has many overloads.
If your string format is always in the form yyyy-dd-mm based on: '2019-13-05'
you can extract the year the month and the day, by perhaps using .Split('-') string function or if its the format: '2019/13/05' you can split on '/' e.g. .Split('/').
Then you can create your DateTime object using the constructor like so (you can view them here https://learn.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.8):
constructor:
public DateTime (int year, int month, int day);
initialisation:
PeriodOfAdoption = new DateTime(2019, 5, 13)
so putting it together:
var dateTime = '2019/13/05';
var dateParts = dateTime.Split('/');
PeriodOfAdoption = new DateTime(Int32.parse(dateParts[0]), Int32.parse(dateParts[1]), Int32.parse(dateParts[2]));
If you need a string in the c# side, this is very simple in C# and there are many examples online

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

Converting String to Datetime of string Type "12-07-2012"

I am trying to convert an array of Strings containing Dates in string format
private string[] ex = new string[]{
"29-06-2017","29-12-2016","30-06-2016","31-12-2015","25-06-2015","24-12-2014","26-06-2014","26-12-2013"};
and I want to cast to decimal array and i used the below code but its not working .
public void load()
{
DateTime[] exDate=Array.ConvertAll(ex, new Converter<string, DateTime>(convertDecimal));
List<DateTime> expiryDate = new List<DateTime>();
expiryDate.AddRange(exDate);
expiryDate.Sort();
_expiryDate=expiryDate;
}
public static DateTime convertDecimal(string strgDate)
{
return DateTime.Parse(strgDate);
}
The error I am getting is:
"String was not recognized as a valid DateTime."
var dates = ex.Select(d => DateTime.ParseExact(d, "dd-MM-yyyy", CultureInfo.InvariantCulture))
.ToList();
Try Converting like this:
public static DateTime convertDecimal(string strgDate)
{
return DateTime.ParseExact(strgDate, "yyyy-MM-dd",
System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None));
}

Categories