我使用
转换2014-08-21 12:00 AM至2014-08-21T18:30:00.000ZToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffK")
但现在我想扭转它。 我如何将2014-08-21T18:30:00.000Z转换为2014-08-21 12:00 AM?
答案 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();