代码之家  ›  专栏  ›  技术社区  ›  dragonfly

datetimeformatinfo.invariantinfo或toString/TryparSeeXact中为空

  •  0
  • dragonfly  · 技术社区  · 14 年前

    我想知道这两个调用之间的应用程序的区别是什么,即结果日期时间对象、TryparSeeXact是否成功以及ToString操作的结果:

    DateTime.TryParseExact(value, "MMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out conversionResult)
    
    DateTime.TryParseExact(value, "MMM yyyy", null, DateTimeStyles.None, out conversionResult)
    

    这两个电话:

    conversionResult.ToString("d M yyyy", DateTimeFormatInfo.InvariantInfo)
    
    conversionResult.ToString("d M yyyy")
    

    我知道提供空值将导致使用线程区域性信息…

    当我显式地提供格式、不使用分隔符等时,我无法找出指定区域性信息的原因。

    谢谢,pawe_

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jon Skeet    14 年前

    您希望它使用什么月份的名称,就像一个文化如何产生差异的例子一样?

    当然,在 一些 格式不会有什么不同,但在其他情况下会有。例如:

    using System;
    using System.Globalization;
    using System.Threading;
    
    class Test
    {
        static void Main()
        {
            CultureInfo french = new CultureInfo("fr-FR");
            Thread.CurrentThread.CurrentCulture = french;
            DateTime now = DateTime.Now;
            Console.WriteLine(now.ToString("d MMM yyyy"));
            Console.WriteLine(now.ToString("d MMM yyyy",
                                           CultureInfo.InvariantCulture));
        }
    }
    

    结果:

    14 sept. 2010
    14 Sep 2010
    

    (这是一个相对温和的案例。)

    分析或格式化字符串时,需要考虑源/目标是计算机还是用户。如果它是一台计算机,那么不变的文化可能是最合适的。如果是用户,他们的文化可能是最合适的。