从时区datetime转换为短日期C#

从时区datetime转换为短日期C#,c#,datetime,datetime-format,timezone-offset,C#,Datetime,Datetime Format,Timezone Offset,我有这样的日期时间数据:2018-06-29T22:10:33Z 我需要短日期格式-2018年6月29日 我在C#中尝试了以下方法: 两者都有错误 我使用dateString.substring(0,10)获取前10个字符并将其转换为日期 有更好的方法吗?您可以使用DateTime.TryParse方法。即: string s = "2018-06-29T22:10:33Z"; DateTime t; if (DateTime.TryParse(s, out t)) { Console.

我有这样的日期时间数据:
2018-06-29T22:10:33Z

我需要短日期格式-
2018年6月29日

我在C#中尝试了以下方法:

两者都有错误

我使用
dateString.substring(0,10)
获取前10个字符并将其转换为日期


有更好的方法吗?

您可以使用DateTime.TryParse方法。即:

string s = "2018-06-29T22:10:33Z";
DateTime t;
if (DateTime.TryParse(s, out t))
{
    Console.WriteLine(t.ToShortDateString());
}
要获取UTC日期,请执行以下操作:

string s = "2018-06-29T22:10:33Z";

DateTime t;
if (DateTime.TryParse(s, out t))
{
    Console.WriteLine(t.ToUniversalTime().ToShortDateString());
}

首先也是最重要的是,日期格式似乎没有很好地格式化。您应该收到的格式应该是“yyyy-MM-ddTHH:MM:ss.FFFFFFF K”(即“2018-06-29T22:10:05.1440844Z”)

假设所提供的示例日期中存在键入错误,下面是将日期时间字符串(UTC格式)转换为日期时间的两个示例:

var dateString = "2018-06-29T22:10:05.1440844Z";

var datetime = DateTime.ParseExact(dateString, "yyyy-MM-ddTHH:mm:ss.fffffffK", CultureInfo.InvariantCulture);
var date = datetime.Date;


您必须考虑获得UTC日期,并且必须考虑时区转换。此外,当只使用日期部分时,时间部分设置为“12:00:00 AM”。

“22:1033”是一种非常奇怪的格式。它真的在分和秒之间没有第二个冒号吗?你知道它是否总是在UTC,或者有时可能会有UTC偏移量而不是Z吗?我的错。事实上还有第二个冒号。这始终是我在数据中遇到的时间戳。错误是什么?因为
Parse
方法对我有效。如果
DateTime.Parse
不起作用,那么
DateTime.TryParse
@AstroRP也不会起作用。我没有说过,TryParse在错误处理方面有优势。@AstroRP:没错。我也试过TryParse。问题似乎是源日期时间可能是非标准的,因为我在MSDN文档中也没有看到它。@GVashist,它是标准的,您只是在秒部分之前没有冒号。@GVashist,您的意思是获取UTC日期吗?我正在为此添加代码。
var dateString = "2018-06-29T22:10:05.1440844Z";

var datetime = DateTime.ParseExact(dateString, "yyyy-MM-ddTHH:mm:ss.fffffffK", CultureInfo.InvariantCulture);
var date = datetime.Date;
var datetime = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture);
var date = datetime.Date;