2014-11-04 177 views
-4

我需要帮助将当前日期转换为使用C#的“Tue Nov 4 00:00:00 UTC + 0530 2014”日期格式 。日期转换

说我有日期,如:DateTime dt = DateTime.Now;

现在,我怎样才能把它转换中提到的格式。

+1

[解析字符串可能重复到DateTime在C#](http://stackoverflow.com/questions/5366285/parse-string-to-datetime-in-c-sharp) – DaImTo 2014-11-04 12:17:28

+1

可能的重复http://stackoverflow.com/questions/3323113/datetime-字符串与时区 – 2014-11-04 12:17:55

+0

你的意思是你有一个'dt'的值,并且你想以特定的方式***格式化它。使用'.ToString(“...”)'。 – 2014-11-04 12:17:56

回答

-1

基于你的建议,我建立这个代码

DateTimeOffset localTime = DateTimeOffset.Now; 
string.Format("{0:ddd MMM d HH:mm:ss} UTC+{1} {0:yyyy}", localTime, localTime.Offset.ToString("hhmm")); 

及其产生正确的格式: “星期二11月4日18点25分48秒UTC + 0530 2014”

+0

http:// stackoverflow。com/help/someone-answers – dotctor 2014-11-04 20:56:40

+0

@HamidP:确定如果将“hhmm”更改为“HHmm”即可使用。你有没有测试过它?如果我将“hhmm”改为“HHmm”,那么我得到System.FormatException“输入字符串的格式不正确。” – Avijit 2014-11-06 20:24:41

0

我觉得承担风险来回答你的问题,但无论如何..

一个DateTime没有any隐格式。它只有日期和时间值等。这就是为什么不可能有任何格式。但string他们的表示可以有一个格式。格式化DateTime很容易,只需要使用DateTime.ToString()方法与特定的文化。 (在你的情况看起来像InvariantCulture是一个很好的候选人)

DateTime dt = DateTime.Now; 
dt.ToString("ddd MMM d HH:mm:ss 'UTC+0530' yyyy", CultureInfo.InvariantCulture); 

回报

Tue Nov 4 14:20:36 UTC+0530 2014 

AFAIK,时区缩写没有标准,这就是为什么有方法来分析他们除了文字字符串分隔符。此外,由于一个DateTime不守offset值,你也需要解析它作为一个字符串分隔符

如果你想+05:30代替+0530结果,"zzz" custom format specifier将是一个不错的选择,因为它得到+-标志,本地操作系统时区的小时和分钟部分偏移量从UTC

+0

如果您使用'“ddd MMM d HH':​​'mm':'ss'UTC + 0530'yyyy”'with冒号':'受单引号保护,我认为没有必要指定格式提供者(文化信息)。 – 2014-11-04 12:29:30

+0

请注意''ddd MMM d HH:mm:ss'UTC'zzz yyyy“'将反映当前机器的时区('zzz'部分),但'05'和'30'之间将会出现一个冒号(假设印度/斯里兰卡语区)。 – 2014-11-04 12:31:12

+0

@JeppeStigNielsen是的,但如果OP的“CurrentCulture”与英文文化不同,“ddd”和“MMM”可能会产生与“Tue”和“Nov”不同的缩写名称。 – 2014-11-04 12:31:14