twitter4j 和 twitter 时间戳处理
twitter4j and twitter timestamp handling
根据官方推特api页面https://dev.twitter.com/overview/api/tweets)每条推文的"created_at"时间戳是根据"UTC time when this Tweet was created.".
编译的
哪个UTC?
因为在推文结构内的用户结构下,我找到了创建推文的用户的 "utc_offset" (https://dev.twitter.com/overview/api/users)。
所以我的问题是我是否可以考虑每条推文的 "created_at" 字段,独立于使用的 api,作为没有偏移的 UTC。
并且只是为了确定 twitter4j 是否会改变这种行为,因为如果我 运行 在意大利进行这样的简单流媒体测试,UTC-1 在哪里
String now = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println("test run at: " + now);
StatusListener listener = new StatusListener(){
@Override
public void onException(Exception ex) {
ex.printStackTrace();
}
@Override
public void onStatus(Status status) {
System.out.println("@" + status.getId() + " - " + status.getCreatedAt().toString());
}
@Override
public void onDeletionNotice(StatusDeletionNotice sdn) {
}
@Override
public void onScrubGeo(long l, long l1) {
}
@Override
public void onStallWarning(StallWarning sw) {
}
@Override
public void onTrackLimitationNotice(int i) {
}
};
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey ...
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
twitterStream.addListener(listener);
twitterStream.sample();
结果我得到了这样的东西:
run:
test run at: 20160921_084244
[Wed Sep 21 08:42:44 CEST 2016]Establishing connection.
[Wed Sep 21 08:42:46 CEST 2016]Connection established.
[Wed Sep 21 08:42:46 CEST 2016]Receiving status stream.
@778484603443113985 - Wed Sep 21 08:42:47 CEST 2016
@778484603443085312 - Wed Sep 21 08:42:47 CEST 2016
@778484603434795008 - Wed Sep 21 08:42:47 CEST 2016
@778484603443154945 - Wed Sep 21 08:42:47 CEST 2016
@778484603438923776 - Wed Sep 21 08:42:47 CEST 2016
@778484603434721280 - Wed Sep 21 08:42:47 CEST 2016
在哪里很容易注意到推文没有以标准 UTC 显示,似乎 twitter4j 自动将它们调整为本地时区。
谁能帮助我更好地理解。
来自documentation的结果格式如下
"created_at":"Wed Aug 27 13:08:45 +0000 2008"
+0000
是偏移量,Twitter4j 仅采用此输入并创建一个 Date
Java 变量。这意味着控制台上显示的时间取决于您的配置和系统。
根据官方推特api页面https://dev.twitter.com/overview/api/tweets)每条推文的"created_at"时间戳是根据"UTC time when this Tweet was created.".
编译的哪个UTC?
因为在推文结构内的用户结构下,我找到了创建推文的用户的 "utc_offset" (https://dev.twitter.com/overview/api/users)。
所以我的问题是我是否可以考虑每条推文的 "created_at" 字段,独立于使用的 api,作为没有偏移的 UTC。
并且只是为了确定 twitter4j 是否会改变这种行为,因为如果我 运行 在意大利进行这样的简单流媒体测试,UTC-1 在哪里
String now = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println("test run at: " + now);
StatusListener listener = new StatusListener(){
@Override
public void onException(Exception ex) {
ex.printStackTrace();
}
@Override
public void onStatus(Status status) {
System.out.println("@" + status.getId() + " - " + status.getCreatedAt().toString());
}
@Override
public void onDeletionNotice(StatusDeletionNotice sdn) {
}
@Override
public void onScrubGeo(long l, long l1) {
}
@Override
public void onStallWarning(StallWarning sw) {
}
@Override
public void onTrackLimitationNotice(int i) {
}
};
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey ...
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
twitterStream.addListener(listener);
twitterStream.sample();
结果我得到了这样的东西:
run:
test run at: 20160921_084244
[Wed Sep 21 08:42:44 CEST 2016]Establishing connection.
[Wed Sep 21 08:42:46 CEST 2016]Connection established.
[Wed Sep 21 08:42:46 CEST 2016]Receiving status stream.
@778484603443113985 - Wed Sep 21 08:42:47 CEST 2016
@778484603443085312 - Wed Sep 21 08:42:47 CEST 2016
@778484603434795008 - Wed Sep 21 08:42:47 CEST 2016
@778484603443154945 - Wed Sep 21 08:42:47 CEST 2016
@778484603438923776 - Wed Sep 21 08:42:47 CEST 2016
@778484603434721280 - Wed Sep 21 08:42:47 CEST 2016
在哪里很容易注意到推文没有以标准 UTC 显示,似乎 twitter4j 自动将它们调整为本地时区。
谁能帮助我更好地理解。
来自documentation的结果格式如下
"created_at":"Wed Aug 27 13:08:45 +0000 2008"
+0000
是偏移量,Twitter4j 仅采用此输入并创建一个 Date
Java 变量。这意味着控制台上显示的时间取决于您的配置和系统。