在早期的vb.net 2008中,我使用DateTime读取dd/mm/yy
格式的日期。我过去常常把文化信息改成英国格式。以便从SQL server中以dd/mm/yy
格式选择日期。
但我知道玩CultureInfo
不好。尽管我用了以下的方式。
还有什么更好的主意吗?
Sub Form_Load()
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-GB", False)
End Sub
还有什么更好的主意吗?谢谢你的想法。
谢谢&当做
从DateTime到字符串:
string s = DateTime.Today.ToString("dd/MM/yyyy");
从字符串到日期时间:
DateTime d;
bool success = DateTime.TryParseExact("26/05/2011", "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);
在C#中,您可以获得所需格式的日期字符串,如
string date = DateTime.Now.ToString("dd/MM/yyyy");
如果您想从表示特定区域性中DateTime的字符串值中获取DateTime对象,可以执行
DateTime dt = new DateTime();
DateTime.TryParse("16/01/2011", System.Globalization.CultureInfo.CreateSpecificCulture("en-GB"),
System.Globalization.DateTimeStyles.None, out dt);
DateTime-->字符串
DateTime.Now.ToString( new CultureInfo("fr-FR", false) );
字符串-->日期时间:
首选方法可能是DateTime.Parse()
dateString = "16/02/2008 12:15:12";
try
{
dateValue = DateTime.Parse(dateString, new CultureInfo("en-GB", false));
Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
}
catch (FormatException)
{
Console.WriteLine("Unable to convert '{0}'.", dateString);
}
这样,您就不会更改当前上下文的文化信息。不过,这确实假设您事先知道格式。
由于IFormatProvider
接口,您可以使用CultureInfo格式化日期,而无需为整个线程设置区域性:
DateTime d = DateTime.Now;
CultureInfo c = new CultureInfo("en-GB", false);
string s = d.ToString(c.DateTimeFormat);
这还有一个额外的优势,即您没有任何硬编码格式,如果用户更改了机器上的本地化设置,您的应用程序将反映他们的偏好。
您可以使用DateTime.TryParse
来解析日期。。。
string s = "01/01/2011";
DateTime date;
if (DateTime.TryParse(s, out date))
{
// Parsed correctly
}
else
{
// Invalid string!
}
甚至使用IFormatProvider
来帮助TryParse
制定格式。
CultureInfo c = new CultureInfo("en-GB", false);
string s = "01/01/2011";
DateTime date;
if (DateTime.TryParse(s, c.DateTimeFormat, DateTimeStyles.None, out date))
{
// Parsed correctly
}
else
{
// Invalid string!
}