我在UTC时间戳中有一些时间。我从中创建一个DateTime对象,然后尝试用“(今天)”或“(明天)”解释它是否如此:
DateTime dateTimeUtc = new DateTime(this.timeUtc, DateTimeZone.UTC);
DateTimeFormatter dateTimeFormatter = DateTimeFormat.mediumDate();
String resultingString = dateTimeUtc.withZone(DateTimeZone.forTimeZone(TimeZone.getDefault()))
.toString(dateTimeFormatter);
if(dateTimeUtc.getDayOfYear() == DateTime.now(DateTimeZone.UTC).getDayOfYear()) {
resultingString += " (" + context.getResources().getString(R.string.today_caption) + ")";
} else if(dateTimeUtc.getDayOfYear() == DateTime.now(DateTimeZone.UTC).plusDays(1).getDayOfYear()) {
resultingString += " (" + context.getResources().getString(R.string.tomorrow_caption) + ")";
}
但是 - 令人惊讶的是 - 我的应用程序在某个地方进行了TimeZone转换。设备设置为东欧时间(GMT + 3当前),它的工作方式如下:2月2日上午2:59被视为今天(0_o)2月6日3:01已经是明天了。
有人会指出错误吗?
P上。 S。:如果有更好的方法将DateTime定为“今天”或“明天” - 我会很高兴看到任何想法。
答案 0 :(得分:0)
由于没有提供答案,我会发布自己的解决方法。虽然仍然不知道为什么比较两个UTC划分时间戳的日期会给用户的时区偏移。
这是适合我的代码:
if(dateTimeUtc.withZone(userZone).getDayOfYear() == DateTime.now(DateTimeZone.UTC).withZone(userZone)
.getDayOfYear()) {
resultingString += " (" + context.getResources().getString(R.string.today_caption) + ")";
} else if(dateTimeUtc.withZone(userZone).getDayOfYear() == DateTime.now(DateTimeZone.UTC).withZone(userZone)
.plusDays(1).getDayOfYear()) {
resultingString += " (" + context.getResources().getString(R.string.tomorrow_caption) + ")";
}
如果给定的日期是从现在到明天开始或从明天开始到第二天开始的间隔,这将产生正确的检查。