我即将创建一个转换器将日期转换为自定义格式。
事实上,在一个转换器中,我有一个像这样的日期 17/05/2011 00:00:00,我想简单地转换为 17/05/2011。 但是,文化也应被考虑在内。
在我上面的例子中,我有英国文化,但如果用户是美国人,那么它将被转换为 05/17/2011。
实际上,我还需要一个 ConvertBack 将日期转换回来,而不管文化如何,都可以将其转换为数据库友好的格式,以普遍安全地保存它而不会产生误解。
这是我第一次尝试已经失败了:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value == null)
return null;
DateTime date = DateTime.Parse(value.ToString(), culture);
return date;
}
同样令人惊讶的是,上面的 CultureInfo 参数是 Us-en,尽管 Windows 中的所有内容都设置为英国。 顺便说一句,我正在为 Silverlight 4 使用此转换器,也许在这里获得文化是不同的......同样奇怪的是,我得到了一个期望"字符串未被识别为有效的日期时间"。我认为这是由于我那里的美国文化不理解 17 一个月。 如何在 Silverlight 应用程序中设置我的本地区域性?
然后我需要第二个转换器来仅返回与上述类似的时间。 我想我可以使用重载日期时间样式.NoCurrentDateDefault,因为它只能从日期生成时间,对吗?
非常感谢您的帮助,
可以在当前线程上设置区域性,应用程序中的每个线程都可以位于不同的区域性中。
http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture(v=VS.100).aspx
好奇,如果您的计算机在 en-gb 中,但您的应用程序在 en-us 中,我会推测该应用程序正在显式放入该文化中,也许是通过配置文件。 如果未为应用程序提供区域性,则会采用 OS 区域性。
在我记得 ASP.NET Web 应用程序中,您还可以在配置文件中指定区域性。
您的最终目标只是切断DateTime
的时间部分吗? 如果是这样,则有一个可用的DateTime.Date
属性,然后可以使用默认的 .NET 区域性支持进行转换。
ConvertBack
方法可以节省UTC的时间,DateTime
上有多种方法可以保存到UTC。 UTC 包含时区信息,采用一种格式,适用于数据库。
http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx
虽然说实话,如果SQL Server是你的数据库服务器,只要你将日期存储为日期而不是字符串,文化就会再次为你处理。