Java每天在同一时间向不同的时区发送电子邮件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java每天在同一时间向不同的时区发送电子邮件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2449字,纯文字阅读大概需要4分钟。
内容图文
![Java每天在同一时间向不同的时区发送电子邮件](/upload/InfoBanner/zyjiaocheng/770/d7a2e8858ddb458d9cb5b472b2b9dcaf.jpg)
事实证明这似乎是一个复杂的主题,请告诉我,如果我的方法过于简单.
基本上我正在尝试做的是每天早上7点向用户列表发送电子邮件提醒(只有当他们有提醒时,但这是除了要点之外).当然,早上7点是基于全世界每个人的服务器位置的不同时间.
计划是在用户注册时通过javascript收集GMT抵消小时:
var today = new Date();
var offset = -(today.getTimezoneOffset()/60);
很简单,我现在知道偏移小时并将其与其他用户数据一起存储在数据库中.现在服务器端我有一个TimerTask设置,每小时运行一次.我收集系统小时(比如早上5点),看看离目标时间有多远(在这种情况下是2(7-5)),得到系统偏移小时(在这种情况下是-5),然后拉所有来自数据库的GMT偏移小时为-3(-5 2)的用户,然后发送电子邮件等.此时我假设我知道它上午7点为所有人,时区偏移为-3,我可以继续与过程.这将在下一个小时再次运行,并收集时区偏移为-4的所有用户.这是真的有用的东西,还是我错过了什么?
Calendar systemTime = Calendar.getInstance();
int targetHour = 7;
int currentHour = systemTime.get(Calendar.HOUR_OF_DAY); //Its 5 am.
int difference = targetHour - currentHour; //2
int zoneOffset = systemTime.get(Calendar.ZONE_OFFSET) / (1000*60*60); //-5
int targetZone = zoneOffset + difference; //-3
List<User> users = userDAO.findByZoneOffset(targetZone);
for(User user : users) {
//Send email or whatever I want to do with these users.
}
我理解可能客户端时区可能设置不正确,因此产生了结果,但我愿意承担这种风险,因为它不是绝对必要的提醒出现在正好早上7点,更可取.
解决方法:
The plan is to collect to GMT offset hour via javascript from the user when they register
这不足以一致地获得时区.它没有考虑夏令时.因此,如果用户在任何可以观察夏令时的地方,他们将在早上6点收到电子邮件大约半年,或者他们将在早上8点收到大约半年的电子邮件.你最好根据IP地理位置偏移来猜测他们的时区.
I have a TimerTask set up that runs every hour.
我建议比这更频繁地跑步.否则,您可能会发现在您发送电子邮件之前就已经开始醒来了 – 所以您再回去睡觉,并在下次7:59发送电子邮件…这可能是您当前的8:59方案,基于客户DST的变化.那时你的预计发送时间差不多两个小时了!
I collect the system hour
也不要这样做.此时有两个时区需要考虑 – 并且您的服务器时区完全不相关.使用UTC直到转换为客户端的本地时间.它会让生活变得更加简单.如果您仍在使用日历,则只需设置其时区即可.
看看你的代码,看起来你最终可能会完全错过一堆用户,如果你正在检查完全匹配的小时.如果您最终在(比方说)3:59运行一次,然后在4:01运行一次,那么您将错过任何必须在4运行的人.我建议您记录上次向每个用户发送邮件的时间 – 或者可能在你上次跑步的时候 – 并用它来确保你总能抓住每个人.
最后,我强烈建议您使用Joda Time.这是一个更清晰的日期/时间API,它将帮助您考虑在代码中的正确位置使用正确的概念.
内容总结
以上是互联网集市为您收集整理的Java每天在同一时间向不同的时区发送电子邮件全部内容,希望文章能够帮你解决Java每天在同一时间向不同的时区发送电子邮件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。