【问题标题】:How to handle image file download across multiple timezone?如何处理跨多个时区的图像文件下载?
【发布时间】:2017-12-04 12:27:02
【问题描述】:

根据我的时区,我每天早上上午 9 点之后从服务器下载图像文件。我还希望在第二天上午 9 点

显示文件

所以我会在 上午 9 点 之前根据我的时区更新该图像文件,这将确保我每天都能获得更新的图像文件。所有用户都有足够的时间下载相同的图像文件,即 最多 23 小时 45 分钟。 * 15 分钟用于更新目的

现在,如果用户来自我的时区,该应用程序可以正常工作,但如果用户领先于我的时区,它将无法正常工作。获得相同图像文件两次的机会更大。

此外,如果我选择按照时区更新文件,其中首先出现上午 9 点,那么其他部分的用户将无法获得 23 小时 45 分钟的下载时间。

我想知道任何其他解决方案,而不是为每个时区设置单独的服务器,因为它也很难在应用程序中实现。

更新 我认为没有办法提供最多 23 小时 45 分钟的窗口并在第二天上午 9 点显示图像。这两件事都不能在多个时区实现。

我正在使用带有热链接的图像,即具有相同地址的直接下载链接。

【问题讨论】:

  • 您(服务器的)时区是否有夏令时(夏令时)?
  • @Ole V.V:我不知道你说的是什么,但文件更新与服务器时间无关。因为我是根据我的时区更新它的人。
  • 当你想在第二天早上 9 点显示图像时,那个 9 点是服务器时区还是用户时区?请注意,在极少数情况下,用户所在时区的第二天上午 9 点可能仍会在您服务器所在时区的上午 9 点之前——时区相隔可能超过 24 小时。
  • 根据用户时区。
  • 一种选择是客户端知道从上午 9 点开始图像在哪个时区可用,并将该时间转换为它自己的时区。如何做到这一点已被多次询问和回答,例如Timezone conversion。自行搜索以找到更多信息。

标签: android timezone


【解决方案1】:

据我了解您的要求

  • 在上传者(您的)时区的每天上午 8 点 45 分到上午 9 点之间进行图片上传。其他时间都可以下载。
  • 每位客户都应在客户所在时区的每天上午 9 点显示前一天的图像。
  • 应允许客户端有 23 小时 45 分钟的时间来下载图像。

我也知道它可以很好地与您所在时区的客户一起使用。

我们看your comment to another answer的例子:从亚洲/加尔各答时区(印度)上传,在亚洲/东京时区(日本)有一个客户端。印度9点上传完成,日本时间已经是12:30。有些网站会为您进行此类时区转换,例如Time Zone Converter – Time Difference Calculator。日本的 12 点 30 分,距离第二天早上 9 点应该显示图像仅剩 20 小时 30 分钟。所以我们无法满足要求。

让我们想象一下,您设置了一个 20 小时 30 分的窗口(您可能不想这样做)。为了让客户端了解该窗口的时间和长度,它只需要知道上传者的时区。然后它将 9:00 Asia/Kolkata 转换为 12:30 Asia/Tokyo,以发现窗口在 12:30 打开。如何在客户端程序中进行转换,可以在其他问答中找到,例如Timezone conversion

如果东京的客户需要 23 小时 45 小时的窗口,您需要提前上传图片。更准确地说,需要在日本时间 9 点 15 分之前上传。同样,将这个时间转换为您自己的时区,以了解具体时间。

我们还没有完成。虽然日本时间 (UTC+9) 早于印度时间,但某些时区甚至更早。根据Time Zone Abbreviations – Worldwide List 的说法,一些时区在 UTC+14,无论是全年还是夏季。而且这份名单不是一成不变的。为了准备未来的变化,您可能需要再增加几个小时。 java.time 中的区域偏移量转到 UTC+18。

如果您在 9:15 之前上传您的图片,例如 UTC+16,您将在您自己的时区和其他不那么远的时区为客户制造挑战。如果客户知道上传发生的时间,他们可能能够应对挑战。这只是意味着他们经常需要为未来的日子保存更多图片,并且他们需要将上传时间转换为他们自己的时区。正如 Abdul Waheed 在 another answer 中所说的那样,处理后者的更实用的方法可能是宣布和处理 UTC 的上传时间。

ThreeTenABP

对于您的时区转换,我推荐 JSR-310,现代 Java 日期和时间 API,也称为 java.time。这在大多数 Android 设备上还没有内置(它会出现),所以您需要 ThreeTenABP,它是 JSR-310 到 Android 的反向移植。在this question: How to use ThreeTenABP in Android Project中有详尽的解释。然后,您可以例如使用this answer 对您的时区转换进行编码。

要了解有关现代 API 的更多信息,请访问 the Oracle tutorial 或在网上查找其他资源。

【讨论】:

    【解决方案2】:

    您可以通过使用 UTC 时间来执行此操作。您需要获取当前的 UTC,然后将时间转换为设备当前时区,然后您将能够得到您想要的。希望对您有所帮助。

    【讨论】:

    • 这是否意味着我必须通过将上午 9 点转换为本地设备时间并下载图像文件来下载文件?
    • 您需要获取当前的 UTC 时间(返回 UTC 时间的免费网络服务已经可用),然后将该 UTC 转换为设备当前时区,现在检查您希望文件处于什么时间的条件已下载。
    • 我已经修改了问题,我需要在每个设备上显示早上 9 点下载的图像文件清晰。
    • 这是否意味着我不能让多个时区的每个用户在 23 小时 45 分钟内下载该文件?
    • 不,UTC 不是标准时间,如果你根据时区转换它,你肯定会得到你想要的东西
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 2020-01-16
    • 2022-10-02
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多