I have a date in string format (i.e in Dutch language), like "7 juli 2013". I want to convert it in English format. "Convert.toDateTime(strValue) throw exception as that converts only English format. I also try this
string strValue = "7 juli 2013";
CultureInfo ci = new CultureInfo("en-US");
strValue = strValue.ToString(ci);
but this is not working. What is the way to convert it?
string strValue = "7 juli 2013";
// Convert to DateTime
CultureInfo dutch = new CultureInfo("nl-NL", false);
DateTime dt = DateTime.Parse(strValue, dutch);
// Convert the DateTime to a string
CultureInfo ci = new CultureInfo("en-US", false);
strValue = dt.ToString("d MMM yyyy", ci);
You first convert the string to a DateTime, then .ToString the DateTime!
And, in general, it's false that Convert.ToDateTime uses only English. The overload you used uses the current culture of your pc (so on my pc it uses italian), and there is the Convert.ToDateTime(string, IFormatProvider) overload that accepts a CultureInfo.
Multilanguage... But note that this is wrong! You can't be sure that a word doesn't have different meaning in different places!!!
// The languages you want to recognize
var languages = new[] { "nl-NL", "it-IT" };
DateTime dt = DateTime.MinValue;
bool success = false;
foreach (var lang in languages)
{
if (DateTime.TryParse(strValue, new CultureInfo(lang, false), DateTimeStyles.AssumeLocal, out dt))
{
success = true;
break;
}
}
if (success)
{
CultureInfo ci = new CultureInfo("en-US", false);
strValue = dt.ToString("d MMM yyyy", ci);
}
Related
suppose i have a string date = "30-10-2018 15:00:00"
how can i save it a datetime variable depending on pc region and time settings
This is what I got so far:
DateTime evtd;
try
{
switch (cmbDateType.SelectedIndex)
{
case 1:
//India
string dateString = dr.Cells[10].Value.ToString(),
fmt = "dd-MM-yyyy HH:mm:ss";// "g";
CultureInfo provider = CultureInfo.InvariantCulture;
//provider=new CultureInfo("en-IN");
//CultureInfo In = new CultureInfo("en-IN");
//"dd-MM-yyyy HH:mm:ss"
//string fmt = In.DateTimeFormat.FullDateTimePattern;
evtd = DateTime.ParseExact(dateString, fmt, provider);
dtBillsEBN.Rows[i]["evtd"] = evtd; //Valid Till Date
break;
case 2:
//usa:"M/d/yyyy h:mm:ss tt"
evtd = DateTime.ParseExact(dr.Cells[10].Value.ToString(), "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
dtBillsEBN.Rows[i]["evtd"] = evtd; //Valid Till Date
break;
default:
dtBillsEBN.Rows[i]["evtd"] = DBNull.Value;
break;
}
}
catch (Exception ex)
{
string msg = "Try Formating Valid Till Datein correct Format \nor\nchoose skip valid date update ";
MessageBox.Show(ex.ToString());
}
I have had issues string dates and converting them. Explicitly stating the date formats to check against helped.
something like this.
public static string[] DateTimeFormats => new string[]
{
"dd-MM-yyyy",
"MM/dd/yyyy",
"MM-dd-yyyy",
"d-MM-yyyy",
"d-M-yyyy",
"dd-M-yyyy",
"dd/MM/yyyy",
"yyyy/MM/dd HH:mm",
"dd-MM-yyyy hh:mm",
"dd-MM-yyyy HH:mm",
"MMMM yyyy"
};
and then when it comes to the converting of the string date.
internal static DateTime ChangeDateFormat(string dateAdded)
{
return ParseDateTime(DateTime.Now.ToString("dd-MM-yyyy hh:mm"), DateTimeFormats);
}
public static DateTime ParseDateTime(string dateTimeString, string[] formats)
{
try
{
DateTime dateStamp = DateTime.ParseExact(dateTimeString,
formats, CultureInfo.CurrentCulture, DateTimeStyles.None);
return dateStamp;
}
catch (Exception exe)
{
var message = $"dateTimeString: '{dateTimeString}', '{string.Join(",", formats)}'.";
Utility.log(message);
throw;
}
}
Use DateTime.Parse()
DateTime.Parse("30-10-2018 15:00:00")
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
I am trying to create a textbox that will translate 1225 to 12/25/13. After having done a lot of research, I think "DateTime.TryParseExact" is what I need to use, but I can't get it to work. Here is my code:
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime dateValue;
string[] DateTimeFormats = new string[]{
"MM/dd/yy","MM/dd/yy HH:mm","MM/dd/yy HH:mm:ss","HH:mm","HH:mm:ss",
"M/d/yy","M/d/yy HH:mm","M/d/yy HH:mm:ss",
"MM/dd/yyyy","MM/dd/yyyy HH:mm","MM/dd/yyyy HH:mm:ss",
"MMddyy","MMddyyHHmm","MMddyyHHmmss","HHmm","HHmmss",
"MMddyyyy","MMddyyyyHHmm","MMddyyyyHHmmss",
"MMddyy HHmm","MMddyy HHmmss",
"MMddyyyy HHmm","MMddyyyy HHmmss",
"yyyyMMdd","yyyyMMddHHmm","yyyyMMddHHmmss"};
if (DateTime.TryParseExact(TheTextBox.Text, DateTimeFormats, provider, DateTimeStyles.None, out dateValue))
{
TheTextBox.Text = dateValue.ToString("d MMMM yyyy");
}
Any ideas how to fix this?
If it is possible to predict all possible formats, then you can try something like this
static void Main(string[] args)
{
CultureInfo enUS = new CultureInfo("en-US");
string dateString;
DateTime dateValue;
dateString = "0501";
var dateFormats = new String[] {"MM/dd/yy","MM/dd/yy HH:mm","MM/dd/yy HH:mm:ss","HH:mm","HH:mm:ss",
"M/d/yy","M/d/yy HH:mm","M/d/yy HH:mm:ss",
"MM/dd/yyyy","MM/dd/yyyy HH:mm","MM/dd/yyyy HH:mm:ss",
"MMddyy","MMddyyHHmm","MMddyyHHmmss","HHmm","HHmmss",
"MMddyyyy","MMddyyyyHHmm","MMddyyyyHHmmss",
"MMddyy HHmm","MMddyy HHmmss",
"MMddyyyy HHmm","MMddyyyy HHmmss",
"yyyyMMdd","yyyyMMddHHmm","yyyyMMddHHmmss", "MMdd"};
bool matchFound = false;
foreach (var dateFormat in dateFormats)
{
if (DateTime.TryParseExact(dateString, dateFormat, enUS, DateTimeStyles.None, out dateValue))
{
matchFound = true;
Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue.ToString("dd MM yyyy"), dateValue.Kind);
}
}
if (!matchFound)
Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
Console.ReadKey();
}
For the example you provided consider the following change to your code...
string[] DateTimeFormats = new string[]{"MMdd"};
You can use DateTime.ParseExact to translate your string into a DateTime:
The text of the textBox1 is 1225:
DateTime date = DateTime.ParseExact(textBox1.Text,"MMdd",CultureInfo.InvariantCulture);
string yourDate = date.ToString("MM/dd/yy"));
//yourDate is 12/25/13
Note: This will always return the date with the current year (here: 2013).
This is my first post here. The application is a winform I have set the culture for the application as en-GB but while checking and saving I convert it back to en-US I get this the error String was not recornized as a valid DateTime
CultureInfo currentCulture = new CultureInfo("en-US");
string strCheckDate = CheckConvertCulture(input);
string date = DateTime.Now.ToString("M/d/yyyy");
if (DateTime.ParseExact(strCheckDate,currentCulture.ToString(),null)> DateTime.ParseExact(date,currentCulture.ToString(),null))
{
return false;
}
else
{
return true;
}
What am I doing wrong here
This is my converCurrentCulture code
string strdate = string.Empty;
CultureInfo currentCulture = CultureInfo.CurrentCulture;
System.Globalization.DateTimeFormatInfo usDtfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat;
if (currentCulture.ToString() != "en-US")
{
strdate = Convert.ToDateTime(Culturedate).ToString(usDtfi.ShortDatePattern);
}
else
{
strdate = Culturedate;
}
return strdate;
This is what I did to get it to work, but if a user selects an invalid date like 29/02/2013 will it work not sure,
CultureInfo currentCulture = new CultureInfo("en-GB");
string date = DateTime.Now.ToString("dd/MM/yyyy", currentCulture);
Since the application is default to en-GB
if (DateTime.Parse(input) > DateTime.Parse(date))
{
return false;
}
else
{
return true;
}
If this is actually your code:
CultureInfo currentCulture = new CultureInfo("en-US");
string strCheckDate = CheckConvertCulture(input);
if (DateTime.ParseExact(strCheckDate,currentCulture.ToString(),null)
then the problem is in your ParseExact, which translates to
if (DateTime.ParseExact(strCheckDate, "en-US", null))
You would be better off specifying the date in a specific format, and parsing that:
string format = "MM/dd/yyyy HH:mm:ss";
string strCheckDate = input.ToString(format);
// See note below about "why are you doing this?
if (DateTime.ParseExact(strCheckDate, format))
My big question is - why are you doing this? If you have two dates, why are you converting them both to strings, and then converting them back to dates to compare them?
return (input > date);
Please see the MSDN documentation for the proper use of DateTime.ParseExact.
string date = txtWorkingDate.Text;
DateTime dateTime = DateTime.MinValue;
if (DateTime.TryParse(date, out dateTime))
{
args.IsValid = true;
}
else
args.IsValid = false;
txtWorkingDate.Text is like "dd.MM.yyyy" becouse of this validateion is always false if date is not like "dd.MM.yyyy". How c an i check types of date like "dd.MM.yyyy", "MM/dd/yyyy" becouse are all valid.
By using this overload and providing the accepted formats:
string date = txtWorkingDate.Text;
DateTime dateTime;
string[] formats = new[] { "dd.MM.yyyy", "MM/dd/yyyy" };
if (DateTime.TryParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
System.Globalization.CultureInfo cultureinfo =
new System.Globalization.CultureInfo("en-gb");
DateTime dt = DateTime.Parse("13/12/2009", cultureinfo);
You need to specify the culture assuming you know it.
You can use the
DateTime.TryParse(
string s,
IFormatProvider provider,
DateTimeStyles styles,
out DateTime result
)
overload.
Also, you don't need the if, you can simply write
args.IsValid = DateTime.TryParse(...);
As DateTime.TryParse() already returns a bool.