我从一个需要存储在文本框中的数据库中提取DateTime值(如果你必须知道的话,它是一个ASP.NET TextBox)。此DateTime包含毫秒。然后我需要将此值保存回数据库。
问题:当我执行MyTextBox.Text = dbValue.ToString()
时,将排除毫秒数。当用户去保存记录时,它会对TextBox值执行DateTime.Parse()
并将其写回数据库。由于字符串不再包含毫秒,因此DateTime的该组件在保存时会丢失。
我知道我可以通过提供使用fff
的自定义格式字符串来指定路上的毫秒数,但我有点想要考虑文化。这意味着我不想硬编码格式字符串,因为如果我的代码在使用不同文化信息的机器上执行,那么格式字符串在理论上可能无效。
从概念上讲,我正在寻找一种动态方法,我所要做的就是告诉.ToString()
根据当前文化使用毫秒,而不必提供格式字符串。
答案 0 :(得分:1)
我建议使用扩展方法......
public static class Extended
{
public static String ToDateX(this DateTime Caller)
{
return Caller.ToString("dd-MMM-yyyy HH-mm-ss-fff", new System.Globalization.CultureInfo("en-gb"));
}
}
这可能会解决您的问题,因为它不会使用应用文化 ..
答案 1 :(得分:0)
我知道@oscilatingcretin你的要求可能会在这些日子里实现..但是为了面对这些类型问题的新鲜程序员...我发布了一个答案..这是完全independent of Culture
private static void Main(string[] args)
{
//Cloning culture to assign
var newCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Clone() as CultureInfo;
//Datetime.ToString() internally use
//Datetime.ToString(DateTimeFormat.ShortDatePattern+" "+ DateTimeFormat.LongTimePattern)
newCulture.DateTimeFormat.LongTimePattern = "hh:mm:ss fff";
//you can specify custom format for month tooo
//newCulture.DateTimeFormat.ShortDatePattern = "dd-MMM-yy";
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
DateTime d = DateTime.Now;
Console.WriteLine(d.ToString());
Console.ReadKey();
}