0

为什么在 C# 中将像 17/09/2013 00:00:00 这样的日期转换为简单的 2013/09/17 并将其保留为 DateTime 对象如此困难???

我不敢相信...

给定一个像 17/09/2013 00:00:00 这样的字符串,这就是我试图得到它并保持它的日期时间:

DateTime x = DateTime.Parse(String.Format(element.data, "yyyy-MM-dd")).Date;

没什么,它不断添加那些 00:00:00

DateTime x = DateTime.Parse(String.Format(element.data, "dd/MM/yyyy").Replace("/", "-")).Date;

没有。

我尝试了其他十几个技巧和东西,但我没有成功......

MSDN 及其论坛上的所有示例都使用了字符串操作,这是我不想要的,因为我需要通过日期时间将日期传递给 Web 服务。

如何以 dd/MM/yyyy hh:mm:ss 格式将日期时间转换为仅 yyyy-MM-dd 保持日期时间?

谢谢大家

4

4 回答 4

5

ADateTime没有“格式”,它只包含年、月、日、小时、分钟和秒。您只能在将日期转换为字符串时对其进行格式化。

并且 aDateTime总是包含日期和时间!你不能没有DateTime时间。

于 2013-09-17T17:33:29.853 回答
4

日期时间没有format。DateTime 始终包含日期和时间。所以不可能DateTime没有time. 你可以这样尝试:-

DateTime dt = DateTime.ParseExact(yourObject.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

string s = dt.ToString("dd/MM/yyyy");
于 2013-09-17T17:32:31.567 回答
0

/是您的文化的日期分隔符的占位符,因此您需要使用CultureInfo.InvariantCulture它来使其工作:

DateTime.ParseExact(element.data, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Demo

“/”自定义格式说明符

如果要将其转换为以下格式的字符串2013/09/17

string str = dt.ToString("yyyy/MM/dd",  CultureInfo.InvariantCulture);
于 2013-09-17T17:32:11.710 回答
0

正如其他人所说,DateTime类型始终是日期时间。您可以通过调用将时间设置为午夜.Date,但无法将其删除。

在内部,该DateTime类型由包含自 0001 年 1 月 1 日以来的数字的二进制值表示Ticks(按 ISO8601/公历)。一个滴答声是 100 纳秒。它还包括两个位,用于控制.Kind表示基准是 UTC、本地系统时区还是“未指定”——这意味着它可以来自任何地方。

它不会在任何地方尝试省略值的时间部分,也不会在内部存储字符串。

如果您只想将日期作为字符串发出,那么您可以随时执行以下操作:

DateTime myDateTime = DateTime.Now;
string justTheDate = myDateTime.ToString("yyyy-MM-dd");

如果您正在寻找纯粹的“没有时间的日期”类型(不仅仅是字符串表示),那么请仔细查看Noda Time。它提供了一种类型LocalDate,正是这种类型。

于 2013-09-17T19:29:16.770 回答