.net 如何避免字符串插值重复字符串格式

ao218c7q  于 2023-03-20  发布在  .NET
关注(0)|答案(4)|浏览(142)

是否可以不重复字符串格式yyyy-MM-dd HH:mm:ss

Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {DateTime.Now.AddDays(1):yyyy-MM-dd HH:mm:ss}");

除了以下变通方法:

Func<string, object, string> _ = string.Format;
var f = "yyyy-MM-dd HH:mm:ss";
Console.WriteLine($"{_(f, DateTime.Now)} {_(f, DateTime.Now.AddDays(1))}")
xienkqul

xienkqul1#

您尝试使用的格式与以下格式之一非常相似:
| 姓名|说明符|格式|
| - ------|- ------|- ------|
| 可排序格式|s|"yyyy'-'MM'-'dd'T'HH':'mm':'ss"|
| 往返格式|oO|"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK"|
| 通用可排序格式|u|"yyyy'-'MM'-'dd HH':'mm':'ss'Z'"|
如果可以使用其中一个,则无需维护自定义格式字符串。
如果没有,并且您可以全局定义格式,则可以执行以下操作:

CultureInfo.CurrentCulture = new("en-US")
{
    DateTimeFormat =
    {
        ShortDatePattern = "yyyy-MM-dd",
        ShortTimePattern = "HH:mm:ss",
    }
};

然后,如果您使用'g'格式(短日期+短时间)再次运行相同的调用,它将遵守全局设置:

Console.WriteLine($"{DateTime.Now:g} {DateTime.Now.AddDays(1):g}");
// produces: 2023-03-15 16:43:07 2023-03-16 16:43:07

此外,如果您知道所需的格式是在特定区域性/国家/地区中使用的格式,并且因此而使用它,则还可以直接将当前区域性设置为该格式,而不必自定义任何单个格式。

qij5mzcb

qij5mzcb2#

如果您有许多片段需要格式化,我建议为此实现自定义文化:

using System.Globalization;

...

public sealed class MyFormat : IDisposable {
  private CultureInfo m_Saved;
  private CultureInfo m_Current;

  public MyFormat() {
    m_Saved = CultureInfo.CurrentCulture;

    m_Current = new CultureInfo(m_Saved.Name, true);

    m_Current.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
    m_Current.DateTimeFormat.LongTimePattern = "HH:mm:ss";

    //TODO: Add more formats' specifications here  

    CultureInfo.CurrentCulture = m_Current;
  }

  public void Dispose() {
    if (m_Current == CultureInfo.CurrentCulture) 
      CultureInfo.CurrentCulture = m_Saved;
  }
}

那么你可以把它写成

using (new MyFormat()) {
  Console.WriteLine($"{DateTime.Now} {DateTime.Now.AddDays(1)}");
}
7lrncoxx

7lrncoxx3#

可以将字符串格式传递到DateTimeToString()方法中

const string dtFormat = "yyyy-MM-dd HH:mm:ss";
Console.WriteLine($"This is interpolated: {DateTime.Now.ToString(dtFormat)}");
// output: This is interpolated: 2023-03-15 17:48:25

更多详情请访问:

z4bn682m

z4bn682m4#

您可以创建静态类并提供静态属性以获得始终相同的格式。

public static class Utils {
    public static string DateFormat = "yyyy-MM-dd HH:mm:ss";

    public static string PrintDate(DateTime date)
    {
        return date.ToString(DateFormat);
    }

    public static string Format(this DateTime date)
    {
        return date.ToString(DateFormat);
    }
}

用法:

DateTime now = DateTime.Now;
Console.Write(now.Format()); //2023-03-15 18:50:32
Console.Write(Utils.PrintDate(now)); //2023-03-15 18:50:32

相关问题