从指定的dateTime Kotlin Android获取一些小时之前的dateTime



我想得到一个日期时间,它比指定的日期时间早了几个小时。日期时间将采用字符串格式,根据配置,需要在给定时间之前n小时的日期时间(例如,在给定时间前3或4小时(。

我的时间格式是2020-10-20T13:00:00-05:00

使用现代日期时间API:

import java.time.OffsetDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2020-10-20T13:00:00-05:00";
OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr);
System.out.println("Given date time: " + odt);
// 3-hours ago
OffsetDateTime threeHoursAgo = odt.minusHours(3);
System.out.println("Three hours ago: " + threeHoursAgo);
}
}

输出:

Given date time: 2020-10-20T13:00-05:00
Three hours ago: 2020-10-20T10:00-05:00

有关现代日期时间API的更多信息,请访问跟踪:日期时间

如果你正在为你的Android项目做这件事,并且你的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API。

使用Joda时间:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2020-10-20T13:00:00-05:00";
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ").withOffsetParsed();
DateTime dateTime = dtf.parseDateTime(dateTimeStr);
System.out.println("Given date time: " + dateTime);
// 3-hours ago
DateTime threeHoursAgo = dateTime.minusHours(3);
System.out.println("Three hours ago: " + threeHoursAgo);
}
}

输出:

Given date time: 2020-10-20T13:00:00.000-05:00
Three hours ago: 2020-10-20T10:00:00.000-05:00

注意:请查看Joda Time 主页上的以下通知

Joda Time是Java事实上的标准日期和时间库在Java SE 8之前。现在要求用户迁移到java.time(JSR-310(。

使用传统API:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
String dateTimeStr = "2020-10-20T13:00:00-05:00";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
sdf.setTimeZone(TimeZone.getTimeZone("GMT-5"));
Date date = sdf.parse(dateTimeStr);
System.out.println("Given date time: " + sdf.format(date));
// 3-hours ago
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR, -3);
System.out.println("Three hours ago: " + sdf.format(calendar.getTime()));
}
}

输出:

Given date time: 2020-10-20T13:00:00-05:00
Three hours ago: 2020-10-20T10:00:00-05:00

建议:java.util的日期时间API及其格式API、SimpleDateFormat已过时且错误。我建议您应该完全停止使用它们,并切换到现代的日期时间API。

相关内容

  • 没有找到相关文章

最新更新