我正在编写一个程序,需要每小时发送一封电子邮件,但是在用户本地的时间。

假设我在不同时区有2个用户。 约翰在纽约,弗雷德在洛杉矶。 服务器在芝加哥。 如果我想在每个用户本地下午6点发送电子邮件,我必须在服务器时间下午7点将电子邮件发送给John,并在服务器时间下午4点发送给Fred。

在.NET / Sql Server中有什么好处? 我找到了一个包含所有时区信息的xml文件,因此我正在考虑编写一个脚本将其导入数据库,然后查询它。

编辑:我使用“t4znet.dll”并在.NET端进行了所有比较。

===============>>#1 票数:0

我是一名PHP开发人员,所以我将从PHP分享我所知道的。 我确信.NET会包含类似的内容。

在PHP中,您可以获得服务器时间的时区差异 - 正如您建议您在服务器上的不同时间发送电子邮件。

每次添加用户时,都会将其时间偏移量从服务器时间(或服务器时区更改时的时区)中保存。

然后,当您指定更新时,请执行自动任务(Cron for LAMP people),每小时运行一次,检查是否需要发送电子邮件。 这样做直到没有电子邮件发送。

===============>>#2 票数:0 已采纳

您有两种选择:

  • 将调整后的邮件操作时间存储到每个用户的数据库中。 然后只比较服务器时间和存储时间。 为了避免混淆和可移植性问题,我会将所有时间都存储在UTC中。 因此,在SERVER_UTC_TIME()== storedUtcTime时发送邮件。
  • 将每个邮件操作的本地时间存储到数据库中,然后即时转换。 当SERVER_UTC_TIME()== TO_UTC_TIME(storedLocalTime,userTimeZone)时发送邮件。

您应该决定什么对您的应用程序最有意义。 例如,如果所有用户的邮寄时间始终相同,那么使用选项(2)更有意义。 如果事件时间可以在用户之间甚至每个用户之间发生变化,那么如果选择选项(1),则可以使开发和调试更容易。 无论哪种方式,您都需要知道用户的时区。

*这些函数调用显然是伪的,因为我不知道他们在T-SQL中的调用,但它们应该存在。

===============>>#3 票数:0

你可以通过这篇优秀的文章“ 世界时钟和TimeZoneInformation类 ”来补充你的解决方案,我做了一个web服务,发送了一个包含本地和接收时间信息的文件,我做的是修改这个类,这样我就可以解决这个问题它完美无缺,完全符合我的需要。

我想你可以拿这个课,从表“用户”中获取它们的时区并“计算”适当的时间,我的代码就是这样;

//Get correct destination time
DateTime thedate = DateTime.Now;

string destinationtimezone = null;

//Load the time zone where the file is going
TimeZoneInformation tzi = TimeZoneInformation.FromName(this.m_destinationtimezone);

//Calculate
destinationtimezone = tzi.FromUniversalTime(thedate.ToUniversalTime()).ToString();

此类在Windows Vista中存在崩溃“FromIndex(int index)”函数的问题,但您可以修改代码,而不是使用该函数:

    public static TimeZoneInformation FromIndex(int index)
    {
        TimeZoneInformation[] zones = EnumZones();

        for (int i = 0; i < zones.Length; ++i)
        {
            if (zones[i].Index == index)
                return zones[i];
        }

        throw new ArgumentOutOfRangeException("index", index, "Unknown time zone index");
    }

你可以改成它;

    public static TimeZoneInformation FromName(string name)
    {
        TimeZoneInformation[] zones = EnumZones();

        foreach (TimeZoneInformation tzi in zones)
        {
            if (tzi.DisplayName.Equals(name))
                return tzi;
        }

        throw new ArgumentOutOfRangeException("name", name, "Unknown time zone name");
    }

  ask by Shawn translate from so

未解决问题?本站智能推荐:

2回复

如何在SQL Server 2012中的SQLCLR程序集中使用TimeZoneInfo

我想在SQL Server 2012中实现时区转换。但是,TimeZoneInfo标有MayLeakOnAbort属性。 当调用我定义的SQL函数(使用TimeZoneInfo)时,这会导致运行时错误。 报告错误如下 System.Security.HostProtection
1回复

处理.Net中时区的日期时间的最佳方法

我最近在.net中的时区感知Web应用程序中乱搞了时区。 我提出了以下处理时区的解决方案。 我的解决方案是: 让用户个人资料存储他们所在的时区。 在Web服务器上执行与UTC之间的所有转换。 将日期作为UTC存储在数据库中。 我的问题是: 你们
4回复

将asp.net/sql Web应用程序转换为ime zone savy

我们当前的应用程序通过服务器的日期时间存储所有日期。 我在想我们需要将数据库中的所有日期时间值更新到UTC时间。 现在,为了将这些日期显示给用户,我知道.Net 3.5具有特定于日期时间偏移的数据类型。 但是,有人在设置应用程序变量来表示站点所需的时区时看到任何错误吗,然后使用具有该偏
1回复

t-sql“在时区”不知道.net知道的所有时区

我的用户界面具有一个由.Net的TimeZoneInfo.GetSystemTimeZones()(在MVC Razor中)填充的所有时区的下拉列表,然后针对用户进行记录。 我有一个存储过程,需要进行一些处理,并将数据库中已登录的UTC时间转换为当前用户的本地时间,以便在屏幕上显示。
1回复

在SQL Server中处理时区

我需要根据用户选择的时区显示日期时间。 因此,我在GMT中维护数据库中的所有日期时间。 当我从SQL检索它时-我使用的是以下方法(例如:英国),我不确定它是否适用于具有日光节约时间的时区。 在日光节约期间,应该 如何根据夏令时切换偏移量? 我将用户选择的时区显示名称ID
1回复

如何在SQL中将时间转换为IST?

我将数据存储在名为DPSDateTime的SQL DataTable中。 下面显示的是带有值的数据列: 在上表中, crae_date列具有DateTime值,而State和TimeZone列分别显示crea_date列中的值的Sate和TimeZones。 我想通过名称ISTT
1回复

在SQL中插入UTC偏移日期时间会更改时间-为什么?

我有一个日期2015-03-11T08:43:19.7810000-05:00我正在插入MSSQL2008数据库表datetime字段。 我已经验证我的SQL数据库当前处于夏令时状态。 美国的东海岸是-5偏移量。 插入SQL后,时间立即变为9:43 am,增加了一个小时。
2回复

格式日期基于我在SQL Server 2016中给出的时区

我想获取基于时区的格式化日期: 像这样的函数,但是结果是使用以下格式:
1回复

如何从Sql Server中的TimeZoneOffset了解TimeZone StandardName或DayLightName

我正在使用Sql Sever 2008 R2。 有没有办法从timezoneoffSet中识别时区标准名称或日光名称。 例如,我有“2013-09-26 03:00:00.0000000 -04:00”,需要上面的“东部夏令时”。 如何在SQL Server中完成此操作? 任
1回复

UTC时间到SQL存储过程中的特定时区

我的存储过程中有一个日期时间,即UTC时间。 我希望将其转换为当地的波多黎各时间。 我的存储过程将在各州和波多黎各运行。 我希望结果集时间成为波多黎各时间?