如何将通用时间转换为AM和PM?

时间:2014-08-25 06:04:18

标签: c#

我使用

转换2014-08-21 12:00 AM至2014-08-21T18:30:00.000Z
ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffK") 

但现在我想扭转它。 我如何将2014-08-21T18:30:00.000Z转换为2014-08-21 12:00 AM?

3 个答案:

答案 0 :(得分:2)

你走了:

var localFormat = "MM-dd-yyyy HH:mm tt";
string universalFormat = "yyyy-MM-dd'T'HH:mm:ss.fffK";

var now = DateTime.Now;
Console.WriteLine(now.ToString(localFormat));

var universal = now.ToUniversalTime().ToString(universalFormat);
Console.WriteLine(universal);

var newNow = Convert.ToDateTime(universal).ToLocalTime().ToString(localFormat); 
Console.WriteLine(newNow);

输出:

8/24/2014 11:16 PM
2014-08-25T06:16:45.229Z
8/24/2014 11:16 PM

最后一个是string,就像通用版一样,但您可以放弃ToString()转换,只需按需格式化即可。由您决定,我只提供基础代码。

修改

评论中每个OP的请求:

// Here's one way of converting a string to DateTime.
var date = Convert.ToDateTime("8/24/2014 11:16:45 PM");

// Here's one way of creating DateTime by providing arguments.
var date = new DateTime(2014, 8, 24, 23, 16, 45);

为了安全起见,我还建议将本地化作为其中一个参数。获得这些变量后,您可以执行与先前代码展示相同的操作。

如果您只想要日期或时间,只需相应地格式化输出:

// If you want strings.
date.ToString("MM-dd-yyyy");
date.ToSTring("HH:mm:ss");

// If you want DateTime and TimeSpan
date.Date();
date.TimeOfDay();

答案 1 :(得分:1)

我刚刚在LINQPad中做到了这一点:

var dt = DateTime.Parse("2014-08-21 12:00 AM")
   .ToUniversalTime()
   .ToString("yyyy-MM-dd'T'HH:mm:ss.fffK");

var dtReverse = DateTime.Parse("2014-08-20T18:30:00.000Z")
   .ToLocalTime()
   .ToString("yyyy-MM-dd h:mm tt");

我的结果:

2014-08-20T18:30:00.000Z
2014-08-21 12:00 AM

答案 2 :(得分:0)

你可以试试这个:

TimeZone.CurrentTimeZone.ToLocalTime(date);

同时检查DateTimeOffSet

  

表示某个时间点,通常表示为日期和时间   日,相对于协调世界时(UTC)。

另外

DateTime changedDate = DateTime.SpecifyKind(DateTime.Parse(dateStr),
    DateTimeKind.Utc);
DateTime dt = convertedDate.ToLocalTime();