|
Hi Dan,
I had tried something similar...
DateTime nDate;
bool b = DateTime.TryParse(oDate, out nDate);
{
Console.WriteLine(nDate);
}
but the dates are converted to 01/01/0001.
I am currently thinking I need to format oDate first...
|
|
|
|
|
You may need to use this method[^] which allows you to tell the parser the format of the string.
|
|
|
|
|
Hi Richard,
Same problem. Dates show as 01/01/0001 00:00:00.
RegistryKey subKey = Regkey.OpenSubKey(subKeyName);
string oDate = subKey.GetValue("InstallDate", String.Empty).ToString();
CultureInfo culture;
DateTimeStyles styles;
DateTime nDate;
culture = CultureInfo.InstalledUICulture;
styles = DateTimeStyles.None;
DateTime.TryParse(oDate, culture, styles, out nDate);
Console.WriteLine(nDate);
|
|
|
|
|
I used:
culture = CultureInfo.CurrentCulture;
styles = DateTimeStyles.AssumeLocal;
but I also had to ensure the date was in the format of the local style. If you wish to use a non-standard representation of the date then you need to provide your own implementation of the IFormatProvider[^] interface.
Alternatively, since you know this date is YYYYMMDD you could just split it into its constituent parts and recreate it in the default format for your culture.
|
|
|
|
|
Either use the method as Richard said or make up your own conversion logic,
given that you know that the date in string fromat will always be like "YYYYMMDD" or what have you.
All the best,
Dan
|
|
|
|
|
If you know you are always going to get back date in a particular format, though as a string, for e.g. 20110325, you can insert date separators on your own.
Simply insert separators at the end of the fourth and sixth character and then you can use Convert.ToDate , TryParse or any other method you like on this string.
|
|
|
|
|
As it represents a date/time, it should be a DateTime type. Please don't advise people to perform string operations on objects that represent numbers, DateTime.Parse/TryParse/ParseExact/TryParseExact are easy enough to do it right.
|
|
|
|
|
You can also use the ParseExact[^] method for which you can specify the date format of the string to be parsed.
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime.ParseExact(oDate, "yyyyMMdd", provider);
0100000101101110011001000111001011101001
|
|
|
|
|
Snap!
There is also TryParseExact as well.
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Something else I've learned today.
|
|
|
|
|
I hope the other was rather more interesting!
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
It would struggle to be less so!
|
|
|
|
|
Hi André
Tried that too... "01/01/0001".
I think the problem is that the parser doesn't recognise 20110325 as a date
If I do this
DateTimeFormatInfo myDTFI = new DateTimeFormatInfo();
myDTFI.DateSeparator = string.Empty;
myDTFI.FullDateTimePattern = "yyyymmdd";
string oDate = subKey.GetValue("InstallDate", String.Empty).ToString();
DateTime nDate = DateTime.ParseExact(oDate,"yyyymmdd", null);
Console.WriteLine(oDate);
Console.WriteLine(nDate);
I get this
20110325
25/01/2011 00:03:00
System.FormatException: String was not recognized as a valid DateTime.
|
|
|
|
|
Use 'MM' instead of 'mm'.
'MM' is for months and 'mm' is for minutes.
0100000101101110011001000111001011101001
|
|
|
|
|
Try:
string strDate = "20110325";
DateTime date = DateTime.ParseExact(strDate, "yyyyMMdd", CultureInfo.InvariantCulture); or
string strDate = "20110325";
DateTime date = new DateTime();
if (DateTime.TryParseExact(strDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
...
}
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
RegistryKey Regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
{
if (Regkey != null)
{
foreach (string subKeyName in Regkey.GetSubKeyNames())
{
RegistryKey subKey = Regkey.OpenSubKey(subKeyName);
string oDate = subKey.GetValue("InstallDate", String.Empty).ToString();
if (!String.IsNullOrEmpty(oDate))
{
DateTime date = new DateTime();
if (DateTime.TryParseExact(oDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
Console.WriteLine(date);
}
subKey.Close();
}
produces 25/03/2011 00:00:00
Thanks to everyone for their time
|
|
|
|
|
CCodeNewbie wrote: How do you convert the string 20110325 to a datetime with a "yyyy-mm-dd" format?
Very carefully.
There reason for that of course is because you do not have a "date time".
You have a date.
And there is a difference because a date time has a timezone. Where a date probably doesn't. Or maybe it does. But that is where the 'care' part comes in.
|
|
|
|
|
Good points. C# (or, I should say, the .Net Framework) doesn't have a Date class, though, so he does mean DateTime. It looks like the date is in the same time zone as the application so he shouldn't have an issue with that.
|
|
|
|
|
Hi
For my assignment, want to test out DataRow to insert a new row in to a test table with just one column.
Based on code below I am getting the Data grid populated in the Form, with values in table. But Insert errors out in statement
DataRow dRow = ds.Tables["testtbl"].NewRow();
saying a object reference is missing for dRow. Not sure what the issue is. I thought the NewRow is good enough.
Can you please help to overcome this issue.
namespace SalesAudit
{
public partial class Form1 : Form
{
string strConnection = "Data Source=.;Initial Catalog=Company;Integrated Security=True";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection sqlconn = new SqlConnection(strConnection);
DataSet ds = new DataSet();
string sqls = "select * from testtbl";
SqlDataAdapter da = new SqlDataAdapter(sqls, sqlconn);
sqlconn.Open();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataRow dRow = ds.Tables["testtbl"].NewRow();
dRow[1] = "test";
ds.Tables["testtbl"].Rows.Add(dRow);
da.Update(ds, "testtbl");
sqlconn.Close();
}
}
}
|
|
|
|
|
Got it to work
Had to add the table name testtbl in line below..
da.Fill(ds,"testtbl");
Thanks, Ravi
|
|
|
|
|
or just do
DataRow dRow = ds.Tables[0].NewRow();
i.e. refer to the table as you did a few lines earlier.
|
|
|
|
|
Thanks, your suggestion is the right way to refer to the table instead of giving it a name as I did.
Thanks much it works great now.
|
|
|
|
|
Actually, I'm not sure about that. Giving the table a name means that the lookup will always be the same, even if you change the access to load some other query into ds first. I'd do
da.Fill(ds,"testtbl");
DataTable testtbl = da.Tables["testtbl"];
DataRow dr = testtbl.NewRow();
|
|
|
|
|
I wonder if anyone could help me on adding picture in text box
Sincerely Yours
|
|
|
|
|
This question was already posted in Q&A[^]; please post in one location only.
0100000101101110011001000111001011101001
|
|
|
|