【问题标题】:Is there a way to get milliseconds to show when I call .ToString() on a DateTime WITHOUT using "fff"?有没有办法在不使用“fff”的情况下在 DateTime 上调用 .ToString() 时显示毫秒?
【发布时间】:2013-11-11 14:00:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果您调用ToString 将其转换为数据库所需的格式,那么文化设置是什么并不重要。 fff 将是毫秒,无论文化如何。
  • 但是,为了强制fff,我必须生成自定义格式字符串,不是吗?
  • 用户可以编辑文本框吗?如果答案是否定的,那么您不应该解析文本以将其放入数据库。您应该使用在文本框中显示的 DateTime 值。
  • @JoelRondeau,是的,用户可以编辑文本框。
  • @oscilatingcretin 是的,您将拥有一个自定义格式字符串,用于将其置于所需格式,但这不会影响用户,除非星期几(如“星期三”)是作为保存在数据库中的一部分,我看不出文化有多么重要,因为通常文化特定的东西实际上只与事物的顺序有关(您将在格式字符串中明确定义)。您的数据库肯定使用一致的格式吗?

标签: .net datetime datetime-format


【解决方案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"));
        }
    }

这可能会解决您的问题,因为它不会使用应用程序 Culture ..

【讨论】:

  • 这可能是个愚蠢的问题,但理论上是否有可能并非所有文化都在机器上注册?
  • 据我所知,文化没有在客户端机器上注册……它是一个包含所有文化信息并按要求提供的点网框架……现在,如果你想让你的应用程序文化独立,那么在应用程序启动时将主线程文化更改为您想要的文化......然后整个应用程序将处于相同的文化......
【解决方案2】:

我知道@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();

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多