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")
会强制将字符串格式化为“/”,但我可以看到每个设备都有不同的格式。我怎样才能强制用'/'保存它?
好榜样-
2021/10/06 18:05:53
我在我的数据库中看到来自不同用户的奇怪示例-
2021-10-06 23:48:37
2021.10.12 12:41:42
2021. 10. 06 19:17:23
('.'+space后)
2021.10.13 19.18.16
一个解决方案是将每个 -
、.
和 .
替换为 /
,但这只能解决我发现的奇怪示例。如果还有其他人怎么办?
/
在格式字符串中表示“文化特定的日期分隔符”。如果你想要文字正斜杠,引用它(和冒号,以避免使用自定义时间分隔符):
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)中得到的是,这就是 他们 存储日期的方式,所以也许遵循 :)
我假设 ToString("yyyy/MM/dd HH:mm:ss")
会强制将字符串格式化为“/”,但我可以看到每个设备都有不同的格式。我怎样才能强制用'/'保存它?
好榜样-
2021/10/06 18:05:53
我在我的数据库中看到来自不同用户的奇怪示例-
2021-10-06 23:48:37
2021.10.12 12:41:42
2021. 10. 06 19:17:23
('.'+space后)2021.10.13 19.18.16
一个解决方案是将每个 -
、.
和 .
替换为 /
,但这只能解决我发现的奇怪示例。如果还有其他人怎么办?
/
在格式字符串中表示“文化特定的日期分隔符”。如果你想要文字正斜杠,引用它(和冒号,以避免使用自定义时间分隔符):
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)中得到的是,这就是 他们 存储日期的方式,所以也许遵循 :)