【问题标题】:Showing date/time/hour in email content/body in client/user time zone在客户端/用户时区的电子邮件内容/正文中显示日期/时间/小时
【发布时间】:2017-12-26 04:50:51
【问题描述】:

我有一个用 Java 编写的 Web 应用程序。它使用 Spring 和 Freemarker 从模板和 Spring JavaMailSender 发送电子邮件。

我发送的电子邮件内容中包含时间。问题是服务器将时间存储在 UTC+00 时区,而客户端可能有不同的时区,例如 UTC+03。例如,在电子邮件内容中有 20/07/2017 11:30 (UTC+00),但收件人预计 20/07/2017 14:30 (UTC+03)。

我的问题是:是否可以在客户端时区的电子邮件内容中显示时间,而在服务器端没有关于他的时区的信息?例如,是否有一些技巧可以告诉电子邮件客户端在他的时区解释给定时间?

【问题讨论】:

  • 第一个答案可能会有所帮助...... stackoverflow.com/questions/9543580/… 不过,您必须将 javascript 嵌入到电子邮件中才能使其正常工作。
  • 嵌入 javascript 不是一种选择,因为每个现代电子邮件客户端都会过滤掉 javascript 脚本。对于我的应用,用户将主要使用 Gmail。我试图在邮件中嵌入javascript脚本,而gmail通过忽略<script></script>标签来阻止执行它们。还有其他想法吗?也许 Gmail 网络客户端将一些 html 标记或特定格式的字符串解释为时间/小时,并自动将客户端时区添加到它们?
  • 我不认为有,但如果您使用 PHP 并显示时间,那么您可以将时间添加为图像。时间必须是动态的,这意味着如果用户在几个小时后打开它,时间将会改变。
  • 你能给我一些关于这个解决方案的文章/教程/代码示例吗?或链接到根据 url 参数返回生成的图像的服务。

标签: java spring email gmail freemarker


【解决方案1】:

经过小研究后我自己的答案:

没有“真正的解决方案”可以在电子邮件中显示用户时区的时间,而在后端没有关于他的时区的信息,但是有一些变通方法

说明:

  • 所有现代电子邮件客户端都会过滤掉 Javascript 内容,因此不会 可以制作一个脚本,根据时移显示时间 客户端时区。
  • 没有“魔术技巧”可以给电子邮件客户端一些线索 html的一部分包含时间,它应该被格式化为适当的 大大地。具体来说,Gmail 没有这样的功能。

解决方案:

将用户时区存储在后端(我们向其发送电子邮件的用户)。

他们的时区可以通过两种方式保存:

  • Statically - 有一个地方(输入),用户可以在其中指定他的时区。例如,首次登录和/或“设置”菜单。
  • Dynamically - 用户时区是在他不知情的情况下动态获取的。例如每次登录用户时区通过Javascript获取后,发送到后端并保存在数据库中。

解决方法:

当出于某种原因您不想实施“真正的解决方案”时,有一些解决方法

  1. 最简单的方法是在时间旁边显示有关时区的信息。
    例如20/07/2017 11:30 提供的信息不足,因为我们不知道时区,但20/07/2017 11:30 (UTC+03) 提供了用户需要的所有信息。如果他想在自己的时区度过时间,他只需要自己计算即可。

  2. 有点复杂的做法是提供一个指向网页的链接,该链接显示客户端时区的时间并获取参数中的时间。
    例如:
    https://some-time-resolving-service.com/time/20-07-2017/11/30
    使用 Javascript 检查客户端时区,并根据参数和他的时区显示带有时间的网站。
    Internet 上有提供此类功能的服务。例如https://www.timeanddate.com/worldclock/,Slack 团队在他们的状态站点上使用它来显示读者时区中的事件、中断等时间。示例:https://www.timeanddate.com/worldclock/fixedtime.html?iso=20181108T0035&p1=224 我从这次事件中提取的:https://status.slack.com/2018-11/8abae7811317864c

  3. 执行与第二点相同的操作,但不是提供链接,而是嵌入图像并使用返回图像的服务。
    像这样:
    <img src="https://some-time-resolving-service.com/timeimage/20-07-2017/11/30" alt="Time in the right timezone" height="50" width="100">
    或类似:
    <img src="https://some-time-resolving-service.com/timeimages/20-07-2017-11-30.png" alt="Time in the right timezone" height="50" width="100">.
    我不确定它是否有效。

【讨论】:

  • 所以看起来没有解决方案。在后端保存并不可靠,因为用户可能正在旅行或刚刚结束旅行并返回家中。我们需要该地点的时区以及他看到我们界面的那一刻。所以我会提到 UTC,虽然我不喜欢它。
猜你喜欢
  • 2010-12-22
  • 2018-01-14
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多