【发布时间】:2022-01-23 13:52:54
【问题描述】:
根据https://developers.google.com/gmail/api/guides/filtering,如果搜索日期,则使用 PST 时区。
我有一封电子邮件:
Date: Tue, 27 Jul 2021 06:07:49 GMT (06:07 AM)
如果将其转换为 PST 时区,则应为:
Date: Mon, 26 Jul 2021 23:07:49 PST (11:07 PM)
现在当我使用查询时
after:2021/07/27
找到了电子邮件,但不应该根据定义(当我直接在 gmail.com 上搜索时)。
查询
before:2021/07/27
什么都不返回。
我还没有找到关于如何按日期正确搜索以及真正应用了哪些时区的说明。
我正在使用 google-api-services-gmail-v1-rev110-1.25.0.jar。
附加信息:
String account = "myemail@gmail.com";
List<String> labelIds = new ArrayList<>();
labelIds.add("Label_mylabelid");
String query = "after:2021/07/27";
List<Message> timeZoneMsgs = gmail.users().messages().list(account).setQ(query).setLabelIds(labelIds).execute().getMessages();
我进行了另一项测试:我安排在第二天晚上 11:30 到凌晨 01:00 之间发送一些电子邮件。
以下是消息的日期标头(直接来自有效负载):
Scheduled mail 1
Date: Fri, 24 Dec 2021 23:30:00 +0100
Scheduled mail 2
Date: Fri, 24 Dec 2021 23:45:00 +0100
Scheduled mail 3
Date: Sat, 25 Dec 2021 00:00:00 +0100
Scheduled mail 4
Date: Sat, 25 Dec 2021 00:15:00 +0100
Scheduled mail 5
Date: Sat, 25 Dec 2021 00:30:00 +0100
Scheduled mail 6
Date: Sat, 25 Dec 2021 00:45:00 +0100
Scheduled mail 7
Date: Sat, 25 Dec 2021 01:00:00 +0100
如果我搜索
after:2021/12/25
直接在 gmail.com 上 - 我会收到 3 到 7 条消息,如果我搜索的话
before:2021/12/25
我得到 1 和 2,都是正确的。
但是当我对 java 调用执行相同操作时,我只收到消息 7(凌晨 1 点)表示“after:2021/12/25”和消息 1-6 表示“before:2021/12/25”。
另一个例子:
我还尝试使用 UTC 的纪元时间进行搜索:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.clear();
calendar.set(2021, Calendar.DECEMBER, 25);
long secondsSinceEpoch = calendar.getTimeInMillis() / 1000L; // 1640390400
在这里,对于直接 gmail.com 搜索和 java 搜索,我得到了相同的结果:消息 7(下午 1 点)表示“after:1640390400”和 1-6 表示“before:1640390400”。
如果我为 PST (1640419200) 尝试此操作,我不会收到“after:1640419200”的消息,而所有消息都是“before:1640419200”的消息。
【问题讨论】:
-
根据我在documentation 中看到的内容,您可以使用与Gmail 搜索框格式相同的
q。您可以检查消息是否在这种情况下出现?考虑到Gmail将时间存储为 UTC,然后将其转换为您的本地时间。 -
如果您还检查负载中的
Date标头会很有帮助。 -
@Emel 我使用 q 进行查询;我用更多信息更新了我原来的问题。