我想以特定的方式格式化我的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
的值。
因此,如果myText
的值为"hello world"
,则输出应为:
Tue Nov 20 15:30:05 hello world 2018
所以我的问题很简单:我需要编写什么才能获得格式化(除了zzz
部分),但是string
变量的值介于两者之间?
我试过dt.ToString("ddd MMM dd HH:mm:ss " + myText + " yyyy", CultureInfo.InvariantCulture)
,但是对于myText = "hello world"
它会输出
Tue Nov 20 15:30:05 3ello worl20 2018
即myText
的内容将被视为格式化,就像其他内容一样。但我希望myText
的内容可以用字面意思来代替。
您可以用引号('
)包装文本,它将输出您想要的格式。
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
相匹配,这就是为什么你会看到这个结果。
你可以看一下microsoft的Custom date and time format strings,它有一个关于引号的部分(靠近底部)。以DateTime格式(或数字格式)包含引号(单个'
或double "
)会在结果字符串格式中引入字符串文字。
正如@Dmitry在评论中指出的那样,如果myText?.Replace("'", "''")
出现在你的字符串中,你可能需要使用'
。另一种选择是像往常一样使用双引号和转义:
dt.ToString("ddd MMM dd HH:mm:ss \"" + myText + "\" yyyy", CultureInfo.InvariantCulture);
用多行来做这件事是否可以接受?我想你应该可以这样做:
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);
我们在dt.ToString()中放了一个“X”,因为“X”不会被格式化,并且将作为我们的占位符来替换格式化日期后我们想要的任何自定义文本的值。