DateTime ParseExact exception - c#

var str = "00:00:00 02/01/1990";
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);
The above code is throwing an exception "String was not recognized as a valid DateTime."
I thought using ParseExact and specifying the exact format this would be okay. What is wrong with the above?
EDIT:
Solved using invariant culture. Thanks for comments.
var dt = DateTime.ParseExact(str, "HH:mm:ss dd/MM/yyyy", CultureInfo.InvariantCulture);

The "hh" format specifier is for 12-hour AM/PM time, which doesn't support a "00". Try defining it in 24-hour time: HH:mm:ss dd/MM/yyyy

Yes usually in DateTime format the Date comes first before Time. Try this out:
var str = "02/01/1990 00:00:00";
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);
EDITED: OK so you do one trick to get it done:
var str = "00:00:00 02/01/1990";
var split = str.Split(new char[] { ' ' });
if (split.Length == 2)
str = String.Format("{0} {1}", split[1], split[0]);
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

Related

How to extract YYYY-mm-dd from date string?

I have date in format 2017-08-24 22:22:45. How to extract only 2017-08-24?
I tried to use:
var data = date.Split('-');
string convertedDate = data[0] + date[1] + date[2];
But I dislike this solution/
DateTime s = DateTime.Parse("2017-08-24 22:22:45");
Console.WriteLine(s.ToString("yyyy-MM-dd"));
More datetime .ToString() formats
https://blog.nicholasrogoff.com/2012/05/05/c-datetime-tostring-formats-quick-reference/
Other option could be:
string date = "2017-08-24 22:22:45";
string convertedDate = date.Split(' ')[0];
// Result: 2017-08-24
if Date:
string convertedDate = date.ToString("yyyy-MM-dd");
if String:
string convertedDate = data.Substring(0,10);
Simply:
var convertedDate = date.Substring(0, 10);
Your string can be converted into a DateTime object then you can use however you want.
string dateStr = "2017-08-24 22:22:45";
DateTime date = DateTime.Now;
if(DateTime.TryParse(dateStr, out date))
Console.Write(date.ToString("yyyy-MM-dd"));
Using ParseExact
var strDate = "2017-08-24 22:22:45";
DateTime myDate = DateTime.ParseExact(strDate, "yyyy-MM-dd HH:mm:ss",
System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("Your date "+ myDate.ToString("yyyy-MM-dd"));
https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx
You could use a Regular Expression pattern:
var src = "2017-08-24 22:22:45";
var pattern = #"^\d{4}-\d{2}-\d{2}";
var ans = Regex.Match(src, pattern).Value;
But that is probably overkill - just extract it:
var ans = src.Substring(0, 10);
This works for you,
string date = "2017-08-24 22:22:45";
string convertedDate = date.Split(' ')[0];

Trim a string to get date in middle? [duplicate]

This question already has an answer here:
Extract date in a string C#?
(1 answer)
Closed 6 years ago.
I need the following string trimmed
Sat, 02/04/1708:00 PM
so that the result is 02/04/17
How can I accomplish this?
you can use Split() and Substring()
var str = #"Sat, 02/04/1708:00 PM";
var res = str.Split(' ')[1].Substring(0, 8);
Regex rg = new Regex(#"[01]?\d[/-][0123]?\d[/-]\d{2}");
Match m = rg.Match("Sat, 02/04/1708:00 PM");
Console.Write(m.ToString());
WORKING FIDDLE
you can use substring
string str="Sat, 02/04/1708:00 PM";
string newStr=str.Substring(5,8);
You can also do this:
string strInput = #"Sat, 02/04/1708:00 PM";
var dateResult = strInput.Split(' ', ',')[2];
This might do the trick for you.
string smdt = "Sun, 02/04/1708:00 PM";
string format = "ddd, dd/MM/yyhh:mm tt";
DateTime dt = DateTime.ParseExact(smdt, format, CultureInfo.InvariantCulture, DateTimeStyles.None);
string extractedDate = dt.ToString("dd/MM/yy");
The problem with the Question was the Date 02/04/17 is not a Saturday instead it will be Sunday and thus it will not be able to convert to a DateTime. When I change Sat to Sun. The extractedDate is the result which you are looking for.
One liner answer could be
string smdt = "Sun, 02/04/1708:00 PM";
string extractedDate = DateTime.ParseExact(
smdt,
"ddd, dd/MM/yyhh:mm tt",
CultureInfo.InvariantCulture,
DateTimeStyles.None
).ToString("dd/MM/yy");
String str = #"Sat, 02/04/1708:00 PM";
String expected = str.split(' ')[1].Substring(0,8);

Chart shows wrong dates at X axis

I am reading date/time and data from a csv file and store this in a line chart. My date/time string is 1-1-2014 21:55:42 or 18-02-2014 00:00:00 which is actually the first entry and i have for a couple of hours data.
First i'm setting the chartArea X axis lablestyle to the proper format: "d-M-yyyy HH:mm:ss".
Then i parse my actual date string to a DateTime format using the same format as above: d-M-yyyy HH:mm:ss. And add the data to the chart.
I ensure you my date is correct:
And my code:
private void button2_Click_1(object sender, EventArgs e)
{
string line;
char[] delimiters = { ';', ',', '|' };
chart1.Series["Series1"].XValueType = ChartValueType.Time;
chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "d-M-yyyy HH:mm:ss";
chart1.Series["Series1"].Points.Clear();
using (System.IO.StreamReader sr = new System.IO.StreamReader(filename))
{
while (!sr.EndOfStream)
{
line = sr.ReadLine();
DateTime newDateTime = new DateTime();
string[] part = line.Split(delimiters);
Console.WriteLine(part[0]);
newDateTime = DateTime.ParseExact(
part[0],
"d-M-yyyy HH:mm:ss",
CultureInfo.InvariantCulture
);
chart1.Series["Series1"].Points.AddXY(newDateTime, part[5]);
}
}
chart1.Refresh();
}
Problem : You have set the Custom Format for X-Axis as d-M-yyyy HH:mm:ss but you are just providing the datetime without formatting it.
Replace This:
chart1.Series["Series1"].Points.AddXY(newDateTime, part[5]);
With This:
chart1.Series["Series1"].Points.AddXY(
newDateTime.ToString("d-M-yyyy HH:mm:ss"), part[5]);

Convert.ToDateTime in Java

Here's my code in c#.
DateTime gmtTime = Convert.ToDateTime(string.Format("{0} {1}", day[1], day[2])).Add(Convert.ToDateTime(time).TimeOfDay);
What I've tried in Java.
String month = "Jul";
String day = "22";
String gmtTime = String.format("%s %s", month, day);
DateFormat df = new SimpleDateFormat("MMM dd");
Date gmtDate = df.parse (gmtTime);
The result I'm getting into Java is July 22, 1970. How can I get the current year just like in C# when I convert a String to DateTime the year is the current year. Is possible to have a code just like what I've tried in my c# code to transfer it to Java?
Hoping to get a good result. Thanks
Calendar cal=Calendar.getInstance();
int year=cal.get(Calendar.YEAR);
System.out.println(year);
Will give the current year
Change these lines:
String gmtTime = String.format("%s %s", month, day);
DateFormat df = new SimpleDateFormat("MMM dd");
To this:
String gmtTime = String.format("%s %s %s", month, day, Calendar.getInstance().get(Calendar.YEAR));
DateFormat df = new SimpleDateFormat("MMM dd yyyy");
Try adding year to your Java SimpledateFormat, see the formats used here http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#year
DateFormat dateFormat = new SimpleDateFormat("MMM dd yyyy");
final Date currentTime = new Date();
final SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy hh:mm:ss a z");
// Set time zone
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("Current Time: " + sdf.format(currentTime));
Here simply formatting current date-
final DateFormat reportDateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
Date date = new Date();
String dateString = reportDateFormat.format(date);
System.out.println(dateString);

convert datetime to date format dd/mm/yyyy

I have a DateTime object 2/19/2011 12:00:00 AM. I want to convert this object to a string 19/2/2011.
Please help me to convert DateTime to string format.
DateTime dt = DateTime.ParseExact(yourObject.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
string s = dt.ToString("dd/M/yyyy", CultureInfo.InvariantCulture);
First of all, you don't convert a DateTime object to some format, you display it in some format.
Given an instance of a DateTime object, you can get a formatted string in that way like this:
DateTime date = new DateTime(2011, 2, 19);
string formatted = date.ToString("dd/M/yyyy");
As everyone else said, but remember CultureInfo.InvariantCulture!
string s = dt.ToString("dd/M/yyyy", CultureInfo.InvariantCulture)
OR escape the '/'.
You have to pass the CultureInfo to get the result with slash(/)
DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)
DateTime.ToString("dd/MM/yyyy") may give the date in dd-MM-yyyy format. This depends on your short date format. If short date format is not as per format, we have to replace character '-' with '/' as below:
date = DateTime.Now.ToString("dd/MM/yyyy").Replace('-','/');
It's simple--tostring() accepts a parameter with this format...
DateTime.ToString("dd/MM/yyyy");
Here is a method, that takes datetime(format:01-01-2012 12:00:00) and returns string(format: 01-01-2012)
public static string GetDateFromDateTime(DateTime datevalue){
return datevalue.ToShortDateString();
}
You can use the ToString() method, if you want a string representation of your date, with the correct formatting.
Like:
DateTime date = new DateTime(2011, 02, 19);
string strDate = date.ToString("dd/MM/yyyy");
In C# 10 you can use DateOnly.
DateOnly date = new(2011, 02, 19);
string output = date.ToString("dd/M/yyyy", CultureInfo.InvariantCulture);
If you want the string use -
DateTime.ToString("dd/MM/yyyy")
On my login form I am showing the current time on a label.
public FrmLogin()
{
InitializeComponent();
lblTime.Text = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt");
}
private void tmrTime_Tick(object sender, EventArgs e)
{
lblHora.Text = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt");
}
string currentdatetime = DateTime.Now.ToString("dd'/'MM'/'yyyy");
DateTime.Parse(YOUR_DATE_OBJECT).ToShortDateString();
ToShortDateString() method will help you convert DateTime To Just Date String,format dd/mm/yyyy.
This works for me:
string dateTimeString = "21‎-‎10‎-‎2014‎ ‎15‎:‎40‎:‎30";
dateTimeString = Regex.Replace(dateTimeString, #"[^\u0000-\u007F]", string.Empty);
string inputFormat = "dd-MM-yyyy HH:mm:ss";
string outputFormat = "yyyy-MM-dd HH:mm:ss";
var dateTime = DateTime.ParseExact(dateTimeString, inputFormat, CultureInfo.InvariantCulture);
string output = dateTime.ToString(outputFormat);
Console.WriteLine(output);
this is you need and all people
string date = textBox1.Text;
DateTime date2 = Convert.ToDateTime(date);
var date3 = date2.Date;
var D = date3.Day;
var M = date3.Month;
var y = date3.Year;
string monthStr = M.ToString("00");
string date4 = D.ToString() + "/" + monthStr.ToString() + "/" + y.ToString();
textBox1.Text = date4;

Categories