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

在日期和时间之间设置文本格式

  •  0
  • Kjara  · 技术社区  · 7 年前

    我想用一种特定的方式格式化DateTime对象。这是基础:

    DateTime dt = new DateTime(2018, 11, 20, 15, 30, 5, 0);
    Debug.WriteLine(dt.ToString("ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture));
    

    输出将是 Tue Nov 20 15:30:05 +01:00 2018 . 这几乎就是我想要的:而不是 +01:00 我想要一个 string myText .

    所以如果 我的文字 "hello world" ,输出应为:

    Tue Nov 20 15:30:05 hello world 2018

    所以我的问题很简单: 我需要写什么来格式化 (除 zzz 零件) 但它的价值 一串 两者之间的变量?

    我试过了 dt.ToString("ddd MMM dd HH:mm:ss " + myText + " yyyy", CultureInfo.InvariantCulture) ,但对于 myText = "hello world" 它将输出

    Tue Nov 20 15:30:05 3ello worl20 2018

    i、 e.报告的内容 我的文字 将被视为格式化,就像其他一样。但我想要 我的文字 从字面上理解。

    1 回复  |  直到 7 年前
        1
  •  6
  •   haldo Steve Sheldon    7 年前

    你可以用引号括起来( ' )它会输出你想要的格式。

    dt.ToString("ddd MMM dd HH:mm:ss '" + myText + "' yyyy", CultureInfo.InvariantCulture);
    
    // output
    Tue Apr 02 12:37:49 hello world 2019
    

    它和 h hello 以及 d 从 world 所以你才会看到这个结果。

    你可以看看 Custom date and time format strings 来自微软,它有一个关于引号的部分(靠近底部)。包含引号(单个 ' 或双倍 " )在DateTime格式(或数字格式)中,在结果字符串格式中引入字符串文字。

    正如@Dmitry在评论中指出的,您可能需要使用 myText?.Replace("'", "''") ' 出现在字符串中。另一种选择是像往常一样使用双引号和转义:

    dt.ToString("ddd MMM dd HH:mm:ss \"" + myText + "\" yyyy", CultureInfo.InvariantCulture);
    
        2
  •  0
  •   Mattitiyahoo    7 年前

    用多条线这样做可以接受吗?我认为你应该可以这样做:

    DateTime dt = new DateTime(2018, 11, 20, 15, 30, 5, 0);
    string x = (dt.ToString("ddd MMM dd HH:mm:ss X yyyy", CultureInfo.InvariantCulture));
    string z = x.Replace("X", "myText");
    Console.WriteLine(x);
    Console.WriteLine(Environment.NewLine);
    Console.WriteLine(z);
    

    我们把一个“X”放在dt.ToString公司()因为“X”不会被格式化,它将作为我们的占位符,在格式化日期后用我们想要的任何自定义文本替换的值。