ASP.NET DateTime.Parse oddness

Discussion in 'ASP .Net' started by Kevin Kenny, Aug 9, 2003.

  1. Kevin Kenny

    Kevin Kenny Guest

    Dear All,

    I have a date time validation method thus:

    public static bool IsDate(string date, System.IFormatProvider provider) {
    try {
    DateTime.Parse(date, provider)
    return true;
    } catch (System.FormatException)
    return false;
    }
    }

    This works a treat from a console app:
    e.g. bool b = Utils.IsDate("21/2/2003", new CultureInfo("en-GB"));

    However DateTime.Parse throws an exception if the method is called from
    ASP.NET.

    Upon further inspection of the CultureInfo object's
    DateTimeFormat.ShortDatePattern, it reveals itself as "dd/MM/yyyy" when
    called from the console app but is set to "M/d/yyyy" when called from an
    ASP.NET application.

    Anyone got a clue as to whats happening here. Setting the
    ShortDatePattern to "dd/MM/yyyy" solved the problem but it is not very
    satisfying when supposedly the culture info object ought to be correct
    for en-GB.

    The environment is XP, VS.NET2002, FW 1.0.3705.288.

    Thanks
    Kevin
    Kevin Kenny, Aug 9, 2003
    #1
    1. Advertising

  2. Hi Kevin,

    In ASP.NET, you're going to have to make sure that the thread knows about the
    culture. It may be that the box is set up as US and not GB.

    Try this the code below?

    Ken
    MVP [ASP.NET]



    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Threading;
    using System.Globalization ;


    namespace p733workcs1
    {
    /// <summary>
    /// Summary description for dtculture.
    /// </summary>
    public class dtculture : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    bool b = IsDate("2/21/2003", new CultureInfo("en-GB"));
    Label1.Text=b.ToString() ;
    }

    public static bool IsDate(string date, System.IFormatProvider provider)
    {
    System.Threading.Thread.CurrentThread.CurrentUICulture = new
    CultureInfo("en-GB");
    System.Threading.Thread.CurrentThread.CurrentCulture = new
    CultureInfo("en-GB");

    try
    {
    DateTime.Parse(date, provider);
    return true;
    }

    catch (System.FormatException e)
    {
    return false;

    }

    }

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion
    }
    }

    "Kevin Kenny" <> wrote in message
    news:...
    Dear All,

    I have a date time validation method thus:

    public static bool IsDate(string date, System.IFormatProvider provider) {
    try {
    DateTime.Parse(date, provider)
    return true;
    } catch (System.FormatException)
    return false;
    }
    }

    This works a treat from a console app:
    e.g. bool b = Utils.IsDate("21/2/2003", new CultureInfo("en-GB"));

    However DateTime.Parse throws an exception if the method is called from
    ASP.NET.

    Upon further inspection of the CultureInfo object's
    DateTimeFormat.ShortDatePattern, it reveals itself as "dd/MM/yyyy" when
    called from the console app but is set to "M/d/yyyy" when called from an
    ASP.NET application.

    Anyone got a clue as to whats happening here. Setting the
    ShortDatePattern to "dd/MM/yyyy" solved the problem but it is not very
    satisfying when supposedly the culture info object ought to be correct
    for en-GB.

    The environment is XP, VS.NET2002, FW 1.0.3705.288.

    Thanks
    Kevin
    Ken Cox [Microsoft MVP], Aug 10, 2003
    #2
    1. Advertising

  3. Kevin Kenny

    Kevin Kenny Guest

    Ken Cox [Microsoft MVP] wrote:

    >Hi Kevin,
    >
    >In ASP.NET, you're going to have to make sure that the thread knows about the
    >culture. It may be that the box is set up as US and not GB.
    >
    >Try this the code below?
    >
    >Ken
    >MVP [ASP.NET]
    >
    >
    >
    >using System;
    >using System.Collections;
    >using System.ComponentModel;
    >using System.Data;
    >using System.Drawing;
    >using System.Web;
    >using System.Web.SessionState;
    >using System.Web.UI;
    >using System.Web.UI.WebControls;
    >using System.Web.UI.HtmlControls;
    >using System.Threading;
    >using System.Globalization ;
    >
    >
    >namespace p733workcs1
    >{
    > /// <summary>
    > /// Summary description for dtculture.
    > /// </summary>
    > public class dtculture : System.Web.UI.Page
    > {
    > protected System.Web.UI.WebControls.Label Label1;
    >
    > private void Page_Load(object sender, System.EventArgs e)
    > {
    > bool b = IsDate("2/21/2003", new CultureInfo("en-GB"));
    > Label1.Text=b.ToString() ;
    > }
    >
    > public static bool IsDate(string date, System.IFormatProvider provider)
    > {
    > System.Threading.Thread.CurrentThread.CurrentUICulture = new
    >CultureInfo("en-GB");
    > System.Threading.Thread.CurrentThread.CurrentCulture = new
    >CultureInfo("en-GB");
    >
    > try
    > {
    > DateTime.Parse(date, provider);
    > return true;
    > }
    >
    > catch (System.FormatException e)
    > {
    > return false;
    >
    > }
    >
    > }
    >
    > #region Web Form Designer generated code
    > override protected void OnInit(EventArgs e)
    > {
    > //
    > // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    > //
    > InitializeComponent();
    > base.OnInit(e);
    > }
    >
    > /// <summary>
    > /// Required method for Designer support - do not modify
    > /// the contents of this method with the code editor.
    > /// </summary>
    > private void InitializeComponent()
    > {
    > this.Load += new System.EventHandler(this.Page_Load);
    >
    > }
    > #endregion
    > }
    >}
    >
    >"Kevin Kenny" <> wrote in message
    >news:...
    >Dear All,
    >
    >I have a date time validation method thus:
    >
    >public static bool IsDate(string date, System.IFormatProvider provider) {
    > try {
    > DateTime.Parse(date, provider)
    > return true;
    > } catch (System.FormatException)
    > return false;
    > }
    >}
    >
    >This works a treat from a console app:
    > e.g. bool b = Utils.IsDate("21/2/2003", new CultureInfo("en-GB"));
    >
    >However DateTime.Parse throws an exception if the method is called from
    >ASP.NET.
    >
    >Upon further inspection of the CultureInfo object's
    >DateTimeFormat.ShortDatePattern, it reveals itself as "dd/MM/yyyy" when
    >called from the console app but is set to "M/d/yyyy" when called from an
    >ASP.NET application.
    >
    >Anyone got a clue as to whats happening here. Setting the
    >ShortDatePattern to "dd/MM/yyyy" solved the problem but it is not very
    >satisfying when supposedly the culture info object ought to be correct
    >for en-GB.
    >
    >The environment is XP, VS.NET2002, FW 1.0.3705.288.
    >
    >Thanks
    >Kevin
    >
    >
    >
    >

    Hi Ken,

    Thanks for the input.

    The box is configured for UK locales throughout. The problem is that the
    en-GB culture info objects are being instantiated with the wrong
    DateTime.ShortDatePattern (M/d/YYYY instead of dd/MM/yyyy). Explicitly
    assigning the en-GB CultureInfo object to
    Thread.CurrentThread.CurrentCulture &
    Thread.CurrentThread.CurrentUICulture doesn't solve the problem because
    when they are instantiated they are incorrect and all you are doing is
    assigning an already wrong CultureInfo object.

    As i said in my last post the only way round this is to explicitly set
    the ShortDatePattern in code but I shouldn't have to do this. And
    additionally this all works just dandy from a console app.

    Regards
    Kevin
    Kevin Kenny, Aug 10, 2003
    #3
  4. >The box is configured for UK locales throughout.

    Just out of interest, does everything look correct when you go to the Regional
    and Language Options applet > Customize ? Short Date?

    Is it possible that there's something in the machine.config or web.config that
    is changing the short date format?

    Just tossing out ideas here...
    Ken Cox [Microsoft MVP], Aug 11, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Christos TZOTZIOY Georgiou
    Replies:
    3
    Views:
    704
    Christos TZOTZIOY Georgiou
    Sep 13, 2003
  2. Tim Peters
    Replies:
    0
    Views:
    529
    Tim Peters
    Sep 9, 2003
  3. mp
    Replies:
    1
    Views:
    386
    John Machin
    Jul 28, 2006
  4. Martin
    Replies:
    0
    Views:
    333
    Martin
    Dec 27, 2008
  5. Replies:
    2
    Views:
    752
    M.-A. Lemburg
    Jan 6, 2009
Loading...

Share This Page