在C#中格式化日期/时间

时间:2011-09-07 21:17:48

标签: c# datetime formatting timezone

我有一个日期/时间字符串,如下所示:

Wed Sep 21 2011 12:35 PM Pacific

如何将DateTime格式化为这样?

谢谢!

4 个答案:

答案 0 :(得分:9)

使用custom date and time format string

,时区之前的位很容易
string text = date.ToString("ddd MMM dd yyyy hh:mm t");

但是,我相信.NET日期/时间格式将为您提供“太平洋”部分。它能给你的最好的是UTC的时区 offset 。如果你能以其他方式获得时区名称,这很好。

许多TimeZoneInfo个标识符包含这个词太平洋,但没有一个只是“太平洋”。

答案 1 :(得分:6)

string.Format("{0} {1}", DateTime.Now.ToString("ddd MMM dd yyyy HH:mm tt"), TimeZone.CurrentTimeZone.StandardName);
//Result: Wed Sep 07 2011 14:29 PM Pacific Standard Time

如果您不想要显示,请修剪标准时间。

修改 如果您需要在整个地方执行此操作,您还可以扩展DateTime以包含为您执行此操作的方法。

void Main()
{
    Console.WriteLine(DateTime.Now.MyCustomToString());
}

// Define other methods and classes here
public static class DateTimeExtensions
{
    public static string MyCustomToString(this DateTime dt)
    {
        return string.Format("{0} {1}", DateTime.Now.ToString("ddd MMM dd yyyy HH:mm tt"), TimeZone.CurrentTimeZone.StandardName).Replace(" Standard Time", string.Empty);
    }
}

您可以在LinqPad中运行此示例并使用直接复制并粘贴,然后在程序模式下运行它。

更多编辑

从下面发表评论后,这是更新版本。

void Main()
{
    Console.WriteLine(DateTime.Now.MyCustomToString());
}

// Define other methods and classes here
public static class DateTimeExtensions
{
    public static string MyCustomToString(this DateTime dt)
    {
        return string.Format("{0:ddd MMM dd yyyy hh:mm tt} {1}", DateTime.Now, TimeZone.CurrentTimeZone.StandardName).Replace(" Standard Time", string.Empty);
    }
}

答案 2 :(得分:5)

查看有关Custom Date and Time Format Strings的文档。

答案 3 :(得分:2)

请注意,这可能有点粗糙,但它可能会引导您朝着正确的方向前进。

采纳并添加Jon提到的内容:

string text = date.ToString("ddd MMM dd yyyy hh:mm t");

然后在这些方面添加一些内容:

    TimeZone localZone = TimeZone.CurrentTimeZone;
    string x = localZone.StandardName.ToString();
    string split = x.Substring(0,7);
    string text = date.ToString("ddd MMM dd yyyy hh:mm t") + " " + split;

我没有测试过,但我希望它有所帮助!