Converting a year string i.e. '2005' to a Datetime value

12,442

Solution 1

You should create a new DateTime and just enter default days / months if you don't need them, for example:

MyCompany.Founded = new DateTime(Convert.ToInt32(this.TxtCompanyFounded.Text), 1, 1);

Solution 2

It happens just because 2005 is not a standart date and time format and that's the reason Convert.ToDateTime will fail.

You can use DateTime.TryParseExact or DateTime.ParseExact methods instead to parse your custom date and time like;

string s = "2005";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
     Console.WriteLine(dt);
}

dt will be 01/01/2005 00:00:00 (of course it's representation depends on your current culture in .ToString() method)

Here a demonstration.

Solution 3

use

myCompanyAccount.Founded = new DateTime(int.parse(TxtCompanyFounded.Text), 1, 1)

this will insert a date of 1 january + year

Solution 4

You cannot convert a string or int to datetime..So you have to format it like a date..Try this..

 int year=convert.toint32(TxtCompanyFounded.Text);
 DateTime Date= new DateTime(year, 1, 1);

Solution 5

If the user can only enter a year, consider simply:

var date = Convert.ToDateTime(str + "-01-01");

It's not the "cleanest" but it will do the trick (FSVO) - however, maybe the database column should just be a YEAR and not a DATETIME?

Share:
12,442
Paul Kirkason
Author by

Paul Kirkason

Software Developer working with T-SQL, C#, AJAX and JavaScript mainly.

Updated on June 07, 2022

Comments

  • Paul Kirkason
    Paul Kirkason almost 2 years

    I am creating a simple input form to create an account. On the form there is an input field for the year the company was founded, this is a simple textbox where the user will type in the year i.e. 2005.

    However on attempting to insert this to the database field which is a datetime an error is being thrown despite converting the textbox entry to datetime...

    myCompanyAccount.Founded = Convert.ToDateTime(this.TxtCompanyFounded.Text);
    

    Is there a way in which i can can convert a year input i.e. 2005 to a datetime so it can be inserted to the database...? Thanks in advance!

    • Steve
      Steve almost 10 years
      Your logic seems a bit flawed here. A DateTime is not just an year. If you want to store the founded date, then asks for a full date time value with day and month (from some official docs) otherwise the day and month will be arbitrary, instead if the founding year is enough then store it in a simple integer column