【问题标题】:DateTime.Now giving different formats in the same machineDateTime.Now 在同一台机器上给出不同的格式
【发布时间】:2018-05-04 10:53:17
【问题描述】:

我有一个 Windows 服务应用程序,我在其中使用 DateTime.Now.ToString() 获取当前日期和时间,它返回“04-05-2018 05:50:12”。

但我在示例控制台应用程序中尝试了相同的操作,但它以不同的格式返回日期,如 '5/4/2018 5:51:32 AM'

这两台机器都在同一台机器上执行。谁能告诉我为什么这些应用程序中存在日期格式差异?

【问题讨论】:

  • 我想服务帐户对您有不同的文化设置。
  • 约翰,我如何检查这个?
  • 我不确定,但您可以在服务启动时更改它,例如this
  • 如果你想要一个特定的格式然后指定一个格式字符串,例如DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss")
  • 只是出于好奇,您没有将日期格式化为您想要的格式是有原因的吗?即DateTime.Now.ToString("MM/dd/yyyy hh:mm:tt")?

标签: c#


【解决方案1】:


DateTime.ToString() 根据 current culture 格式化 DateTime。写在Documentation

将当前 DateTime 对象的值转换为其等效值 使用当前格式约定的字符串表示 文化。(覆盖 ValueType.ToString()。)

如果您想要相同的字符串,您应该改用DateTime.ToString(string) 重载并提供您想要的确切格式。

ToString(String) 方法返回一个字符串表示 使用格式的特定格式的日期和时间值 当前文化的惯例;有关详细信息,请参阅 CultureInfo.CurrentCulture。

格式参数应包含单个格式说明符 字符(请参阅标准日期和时间格式字符串)或自定义 定义的格式模式(请参阅自定义日期和时间格式字符串) 返回字符串的格式。如果格式为 null 或为空 字符串,使用通用格式说明符“G”。

这种方法的一些用途包括:

获取显示当前日期和时间的字符串 文化的短日期和时间格式。为此,您使用“G” 格式说明符。

获取仅包含月份和年份的字符串。去做这个, 您使用“MM/yyyy”格式字符串。格式字符串使用 当前区域性的日期分隔符。

获取包含特定格式的日期和时间的字符串。 例如,“MM/dd/yyyyHH:mm”格式字符串显示日期和 固定格式的时间字符串,例如“19//03//2013 18:06”。格式 字符串使用“/”作为固定日期分隔符,无论 特定于文化的设置。

获取可用于压缩格式的日期 序列化日期字符串。例如,“yyyyMMdd”格式字符串 显示一个四位数的年份,后跟一个两位数的月份和一个 两位数的日期,没有日期分隔符。

【讨论】:

  • 不过,这并不能回答问题。问题是,为什么 Windows 服务应用程序和控制台应用程序在同一台机器上 之间会有所不同?理论上,两个应用程序的当前文化应该是相同的。
猜你喜欢
  • 2012-12-10
  • 1970-01-01
  • 2018-08-12
  • 2014-01-03
  • 2020-03-25
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 2011-01-19
相关资源
最近更新 更多