有没有办法让我在DateTime上调用.ToString()时显示毫秒,而不使用" fff"?

时间:2013-11-11 14:00:22

标签: .net datetime datetime-format

我从一个需要存储在文本框中的数据库中提取DateTime值(如果你必须知道的话,它是一个ASP.NET TextBox)。此DateTime包含毫秒。然后我需要将此值保存回数据库。

问题:当我执行MyTextBox.Text = dbValue.ToString()时,将排除毫秒数。当用户去保存记录时,它会对TextBox值执行DateTime.Parse()并将其写回数据库。由于字符串不再包含毫秒,因此DateTime的该组件在保存时会丢失。

我知道我可以通过提供使用fff的自定义格式字符串来指定路上的毫秒数,但我有点想要考虑文化。这意味着我不想硬编码格式字符串,因为如果我的代码在使用不同文化信息的机器上执行,那么格式字符串在理论上可能无效。

从概念上讲,我正在寻找一种动态方法,我所要做的就是告诉.ToString()根据当前文化使用毫秒,而不必提供格式字符串。

2 个答案:

答案 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();

    }