DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm:ss") 为不同的用户提供不同的格式

DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm:ss") gives different formats for different users

我假设 ToString("yyyy/MM/dd HH:mm:ss") 会强制将字符串格式化为“/”,但我可以看到每个设备都有不同的格式。我怎样才能强制用'/'保存它?

好榜样-

我在我的数据库中看到来自不同用户的奇怪示例-

一个解决方案是将每个 -.. 替换为 /,但这只能解决我发现的奇怪示例。如果还有其他人怎么办?

/ 在格式字符串中表示“文化特定的日期分隔符”。如果你想要文字正斜杠,引用它(和冒号,以避免使用自定义时间分隔符):

ToString("yyyy'/'MM'/'dd HH':'mm':'ss")

或者——可能更好——使用不变区域性。这不仅会使用 / 作为日期分隔符,而且您无需担心具有不同默认日历的文化。 (它将始终使用公历,这大概是您想要的。)

更好的是,使用 ISO-8601 格式 - 你已经在使用一种“对人类来说有点不寻常”的年头格式,所以你不妨全力以赴并使用 日期和时间的标准格式。

示例代码:

String text = dateTimeValue.ToString(
    "yyyy-MM-dd'T'HH:mm:ss",
    CultureInfo.InvariantCulture);

这也是 sortable standard date/time format,因此您可以显着简化代码:

String text = dateTimeValue.ToString("s");

(该格式始终使用不变区域性。)

不过,如果您真的需要格式化字符串的话。如果您将其保存在数据库中,我建议您:

  • 在数据库中使用适当的类型,例如日期时间
  • 使用参数存储它(指定值就像 DateTime),而不是格式化文本

如果你同时做这两件事,你就会避免这样的怪事。

我能想到的另一个解决方案是创建一个创建日期的新函数
DateTime date= DateTime.UtcNow; 并手动提取并将日期拆分为几个字符串(年、月、日、小时、月、秒)

string year = date.Year.ToString(); string month = date.Month.ToString();... 并以正确的格式从中构建一个字符串, string newDate= year + "/" + month + "/" + day + " "+ hour+":"+ minute+ ":"+seconds; 这样我就可以确定它始终是我要决定的一种格式

如何将日期存储为数字,例如 unix 时间 - DateTimeOffset.UtcNow.ToUnixTimeSeconds()(DateTime.UtcNow - DateTime.UnixEpoch).TotalSeconds - 存储数字比存储字符串更简单且成本更低

还想指出我唯一的约会对象 看到你到目前为止存储的是 UtcNow(如你的回答中所写) - fire base 似乎有一个解决方案,你可以发送 ServerValue.TIMESTAMP 并且它会导致 fb 存储服务器看到的 unix 时间.

我从这个(从未使用过 fb)中得到的是,这就是 他们 存储日期的方式,所以也许遵循 :)