我目前正在开发带有后端 SQL Server 数据库的 ac# Web 应用程序。我在日期方面有一些问题需要解决。
该应用程序在 GMT 时间托管在 Web 和数据库服务器上。用户分布在 3 个不同的时区 CEST、MSK、ALMT,随着时间的推移,该网站有可能推广到其他国家。
在目前的代码中,我在 SQL 中使用 DateTime.Now 和 GETDATE(),并且根据服务器的位置,这是 GMT。
我的问题是,考虑到不同的文化等,日期戳应该以什么形式存储在数据库中。应该是 utc 日期吗?下列情况应如何处理?有标准做法吗?
我想知道语言代码“he-IL”和“he”之间的区别是什么。谢谢您提供任何信息!
我在解析某些语言不是英语的日期字符串时遇到问题。示例日期字符串是“8 avril 2016 vendredi”,即英语中的“8 april 2016 friday”。
我试过这个,但没有运气。
DateTime dateTime;
DateTime.TryParse("8 avril 2016 vendredi", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);
Run Code Online (Sandbox Code Playgroud)
就我而言,日期字符串可以是任何语言,因此我无法在解析时指定文化。
我感谢您的帮助。谢谢。
我正在尝试准备一个有更多语言的应用程序.我准备了最简单的例子来学习它,我做了很多尝试,但我无法做到.
CultureInfo cul = new CultureInfo("de-De");
Resources.Culture = new System.Globalization.CultureInfo("de-De");
label1.Text = TestLanguages.Properties.Resources.Saluto;
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我有两种不同的资源,一种用于意大利语,一种用于德语.
但我不能使用德国人.我该怎么做?
我在我的项目中使用以下代码,但“DateTime.TryParse”在不同的机器上给出不同的结果。IsDate 方法在我的机器上返回“False”,在另一台机器上返回“True”。
if(IsDate("30/03/2020 04:00",out dt))
{
}
private bool IsDate(object o, out DateTime date)
{
return DateTime.TryParse(o.ToString(), CultureInfo.CurrentCulture, DateTimeStyles.None, out date);
}
Run Code Online (Sandbox Code Playgroud)
我还按照下面的文章尝试了“DateTime.TryParseExact”,但没有用。 https://github.com/dotnet/runtime/issues/25120
请向我提出任何想法以使其正常工作。
谢谢。
这似乎很容易,但我认为提供优雅的解决方案很棘手。
需要将 UTC 日期时间作为字符串获取 - 但独立于 CultureInfo 设置。在某种程度上具有良好的性能 - 因为它每分钟需要几次。
因此,如果例如 Thread.CurrentThread.CurrentCulture 设置为 Thai,它将打印2020 -10-08 而不是2565 -10-08。
如上所述,寻找一个轻量级的解决方案,我不需要来回更改 Thread.CurrentThread.CurrentCulture。
我试图在下面的单元测试代码中解决这个问题。除其他外,这目前打印
阿拉伯语返回 1442-02-21T13:03:28.0393847Z
泰国返回 2563-10-08T13:03:28.3558814Z
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
StringBuilder assertionErrors = new StringBuilder();
// each culture info shall return e.g. 2020-10-08
var expected = $"{ DateTime.Now.Year}-{ DateTime.Now.Month.ToString().PadLeft(2, '0') }-{ DateTime.Now.Day.ToString().PadLeft(2, '0')}";
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
// ARRANGE
Thread.CurrentThread.CurrentCulture = ci;
// ACT
string originalTime = GetEventTime();
// ASSERT …
Run Code Online (Sandbox Code Playgroud) 我在哪里可以找到完整的UICulture列表,如en:English en-us等...
我收到错误'字符串未被识别为有效的DateTime.' 通过使用以下代码.
NewRow["ExpiryDate"] = DateTime.ParseExact(SelectedRow.Cells[9].Text, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
其中selectedRow是数据库的行.代码是在RowCommand事件中编写的.SelectedRow.Cells [9]中的值.文本在客户端采用dd-MM-yyyy格式,因为它在服务器端是不同的.
如何编写适用于所有日期时间格式的通用代码?
我的XML配置数据文件中有一个这样的字符串(12小时制):
expires="10/27/2014 2:42:57 PM"
Run Code Online (Sandbox Code Playgroud)
我想将该值指定为类的(datetime)成员,如下所示:
Common.SOExpiries =
DateTime.ParseExact(gSet.Attribute("expires").Value, "MM/dd/yyyy hh:mm:ss",
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
但我得到错误'字符串未被识别为有效的DateTime'
我在这做错了什么?
这是在英国顺便说一句,所以CultureInfo应该没问题
我只是在寻找这两种方法产生不同结果的任何例子.首先,我访问msdn页面,并通过微小的更改运行代码
using System;
using System.Globalization;
using System.Linq;
class Program
{
static void Main()
{
string[] words = { "Tuesday", "Sal?", "???????", "Mardi",
"?????", "Martes", "??? ?????",
"????????", "?????????" };
Console.BufferHeight = 1000;
var test = CultureInfo.GetCultures(CultureTypes.AllCultures)
.Select(ci =>
{
string[] wordsToLower = words.Select(x => x.ToLower(ci)).ToArray();
string[] wordsToLowerInvariant = words.Select(x => x.ToLowerInvariant()).ToArray();
return new
{
Culture = ci,
ToLowerDiffers = !wordsToLower.SequenceEqual(wordsToLowerInvariant)
};
})
.ToArray();
foreach (var x in test)
{
Console.WriteLine("Culture {0}, ToLower and ToLowerInvariant produces different results: {1}", …
Run Code Online (Sandbox Code Playgroud) cultureinfo ×10
c# ×8
datetime ×5
.net ×4
asp.net ×1
date ×1
localization ×1
multilingual ×1
sql ×1
utc ×1
winforms ×1