C#中格式化日期

19

我该如何将日期格式化为dd/mm/yyyymm/dd/yy

例如在VB中使用format("dd/mm/yy",now)

在C#中我该如何做到这一点?

7个回答

48

差不多相同,只需使用 DateTime.ToString() 方法即可,例如:

DateTime.Now.ToString("dd/MM/yy");

或者:

DateTime dt = GetDate(); // GetDate() returns some date
dt.ToString("dd/MM/yy");

此外,您可能希望考虑使用预定义的日期/时间格式之一,例如:

DateTime.Now.ToString("g");
// returns "02/01/2009 9:07 PM" for en-US
// or "01.02.2009 21:07" for de-CH 

这些可以确保格式的正确性,独立于当前的地区设置。

请查看以下 MSDN 页面了解更多信息:


一些额外的相关信息:

如果您想在特定的语言环境中显示日期,则有一个重载的 ToString() 方法,可以使用 IFormatProvider 参数:

DateTime dt = GetDate();
dt.ToString("g", new CultureInfo("en-US")); // returns "5/26/2009 10:39 PM"
dt.ToString("g", new CultureInfo("de-CH")); // returns "26.05.2009 22:39"

另外一种选择是,在格式化日期之前,可以设置当前线程的 CultureInfo

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
dt.ToString("g"); // returns "5/26/2009 10:39 PM"

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-CH");
dt.ToString("g"); // returns "26.05.2009 22:39"

2
我鼓励你遵循马丁的建议,使用预定义的代码,这些代码是具有文化意识的。现在你可能用不到它,但将来它可能会让事情变得更容易。 - Michael Haren

9
string.Format("{0:dd/MM/yyyy}", DateTime.Now)

请在MSDN上查找“格式化字符串”以查看所有格式选项。
日期组件使用yyyyyyMMMMMMMMMMdddddddddd
时间组件使用hhhHHHmmmsss

这是MSDN链接。可能会对其他人有所帮助。https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx - Sai

3
试试这个:
String.Format("{0:MM/dd/yyyy}", DateTime.Now); // 01/31/2009
String.Format("{0:dd/MM/yyyy}", DateTime.Now); // 31/01/2009
String.Format("{dd/MM/yyyy}", DateTime.Now); // 31/01/2009

这个例子将依次调用Date.ToString(string format),如Martin的答案中所示。那比经过String.Format更简单、更直接。 - abelenky
是的,你说得对,Martin的答案是直接的,谢谢。 - Canavar

3
在IT技术中,您还可以编写代码。请注意保留HTML标记。
DateTime aDate = new DateTime(); 
string s = aDate.ToShortDateString();

对于简短的符号表示

或者

DateTime aDate = new DateTime(); 
string s = aDate.ToLongDateString();

对于像“2009年2月1日星期日”这样的长日期格式。

或者查看MSDN,了解.ToString("???")的可能性。


3
更好的做法是只使用 < /p>。
DateTime.Now.ToString() 

或者
DateTime.Now.ToString(CultureInfo.CurrentCulture) 

使用用户喜欢的格式。


1

我遇到了同样的问题。我需要在类的顶部添加一个引用,并更改当前执行线程的CultureInfo。

using System.Threading;

string cultureName = "fr-CA";
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);

DateTime theDate = new DateTime(2015, 11, 06);
theDate.ToString("g");
Console.WriteLine(theDate);

你只需要更改文化名称,例如: "en-US" = 美国英语 "fr-FR" = 法语法国 "fr-CA" = 法语加拿大 等等...

1
我认为这很简单,因为您可以在不混淆的情况下转换为任何格式。
 DateTime.ParseExact(txt.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyy/MM/dd"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接