在我的数据库中存储时区信息的最佳方法是什么? - c#

我有一个接管的asp.net-mvc网站,这里有一个页面页面,人们可以在其中输入信息和时间(包括本地时区)。数据库对我来说有点不稳定,它保留了开始时间,结束时间和时区。这是获取列表可供选择的代码:

  static private IEnumerable<SelectListItem> GetTimeZones(string selected)
    {
        var timeZoneNames = TimeZoneInfo.GetSystemTimeZones()
            .Where(tz => tz.DisplayName.Contains("London")
                         || tz.DisplayName.Contains("Hong Kong")
                         || tz.DisplayName.Contains("Mumbai")
                         || tz.DisplayName.Contains("Eastern Time"))
            .ConvertAll(tz => tz.DisplayName).ToList();

        var items = new List<SelectListItem>();
        foreach (var item in timeZoneNames)
        {
            var slItem = new SelectListItem();
            slItem.Text = item;
            slItem.Value = item;
            slItem.Selected = item == selected;
            items.Add(slItem);
        }

        return items;
    }

因此,它只是存储从TimeZoneInfo.GetSystemTimeZones()返回的完整字符串。

这种方法有什么缺陷吗? reading here我有点担心,这来自本地机器,就像不同的机器具有不同的设置一样。另外,尝试找出是否所有内容都列为UTC或GMT等。 。还有更好的建议吗?例如,我应该在网站上进行到UTC的转换并规范化数据库中的所有时间吗?

参考方案

您应该存储TimeZoneInfo.Id返回的ID。这就是标识符-用于标识时区的字符串。使用显示名称确实不是一个好主意,因为它可能因文化而异,并且不太可能保持稳定。

然后,您可以使用TimeZoneInfo.FindSystemTimeZoneById从ID中检索区域。

诚然,我更喜欢TZDB进行时区处理,但这是另一回事:)

数学和科学方程式和Fomulas的数​​据类型-SQL Server 2008? - c#

我正在使用SQL Server2008。我有一个用于教育部门工作的小项目。为此,我需要存储数学和科学方程式和公式。这意味着数据可能包含带有上标和下标的值。我希望以相同的格式保存数据。是否有适合我需求的适当数据类型? 参考方案 如果此列专门用于存储数学方程式和科学公式,那么我将使用Xml列,然后将数据存储在MathML format中。文字段落,例如说明,可以…

将SQL Server Serilog接收器包装在Async中是否有意义? - c#

我正在尝试最大程度地减少从.NET Core应用程序将日志写入SQL Server的性能影响。过去,我将Serilog File接收器包装在Async接收器中-这极大地提高了性能。SQL Server sink documentation指出它将定期和/或在达到batchPostingLimit时批处理日志条目。我找不到有关它决定发出INSERT命令时发生的…

SQL Joins与Java代码? - java

我有这样的查询Select Folder.name from FROM FolderTable,ValidFolder, ValidFolderGroup, ValidUser, ValidLocation, ValidDepartment where ValidUser.LocationCode *= ValidLocation.LocationCode …

休眠还是Application Server JPA? - java

我在生产中使用Glassfish,在测试中使用OpenEJB。我正在使用JPA 1.0。我使用的是Hibernate,但没有特定的Hibernate功能,只有标准的JPA。休眠在这个集合中是多余的,应该删除,对吗? java参考方案 OpenEJB和Glassfish均提供JPA实现。因此,要运行您的应用程序,您不需要休眠。但是,在某些特殊情况下,JPA实现…

为了避免SQL Server中的SQL注入攻击,应从字符串中转义所有哪些字符? - c#

我正在编写一个小的帮助程序库,该库正在构造一些SQL并针对SQL Server数据库执行该程序。我知道最好的方法是使用参数化查询而不是连接字符串,但这不是一种选择,因为我需要以一种简单的人类可读方式记录对数据库执行的所有查询,以便管理员,他们可以自由查看where子句中用于搜索的实际值。在将该字符串放入查询并执行之前,我必须转义的所有字符是什么?我知道单引号…