Ask a Question related to ASP.NET General, Design and Development.
-
Kevin Kenny #1
ASP.NET DateTime.Parse oddness
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 Guest
-
Accordion oddness
With the below accordion, without making Detail tab visible if I say detailtext.text="zzz" I get TypeError: Error #1009: null has no... -
Lexmark C910 oddness
When printing multiple copies of our PDF to our Lexmark C910, only the first page gets text. The subsequent pages only print graphics. The odd thing... -
Cross-Platform Code Oddness
I'm working my way through a Flash book, and there's a little bit of code in it that explains how the "_rotation" property works. It's attached to a... -
[PHP-DEV] MZ-S oddness
Last weekend I took a roll of Kodak T-Max 100 with the MZ-S When developed, the film is hopelessly under exposed, as if the flashes had never been... -
Rubygarden oddness
All, It appears that "herbless" is posting junk to RubyGarden. Can we get this removed? If "herbless" is following this list, please explain... -
Ken Cox [Microsoft MVP] #2
Re: ASP.NET DateTime.Parse oddness
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.CurrentUICul ture = new
CultureInfo("en-GB");
System.Threading.Thread.CurrentThread.CurrentCultu re = 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" <_no_spam_today_kevin_e_kenny@hotmail.com> wrote in message
news:3F352D2D.3090708@hotmail.com...
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] Guest
-
Kevin Kenny #3
Re: ASP.NET DateTime.Parse oddness
Ken Cox [Microsoft MVP] wrote:
Hi Ken,>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.CurrentUICul ture = new
>CultureInfo("en-GB");
> System.Threading.Thread.CurrentThread.CurrentCultu re = 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" <_no_spam_today_kevin_e_kenny@hotmail.com> wrote in message
>news:3F352D2D.3090708@hotmail.com...
>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
>
>
>
>
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 Guest
-
Ken Cox [Microsoft MVP] #4
Re: ASP.NET DateTime.Parse oddness
>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] Guest



Reply With Quote

