Java 将本地时间转换为UTC,反之亦然
我正在开发Android应用程序,我想将本地时间(设备时间)转换为UTC,并将其保存在数据库中。从数据库中检索后,我必须再次转换它并显示在设备的时区中。有人能建议如何在Java中执行此操作吗?Time.getCurrentTimezone() 会告诉你时区和时间Java 将本地时间转换为UTC,反之亦然,java,android,time,Java,Android,Time,我正在开发Android应用程序,我想将本地时间(设备时间)转换为UTC,并将其保存在数据库中。从数据库中检索后,我必须再次转换它并显示在设备的时区中。有人能建议如何在Java中执行此操作吗?Time.getCurrentTimezone() 会告诉你时区和时间 Calendar c=Calendar.getInstance(); int seconds=c.get(Calendar.SECOND) 将以秒为单位获取UTC时间。当然,您可以更改该值以在另一个单位中获取该值。您可以尝试以下方法将其
Calendar c=Calendar.getInstance();
int seconds=c.get(Calendar.SECOND)
将以秒为单位获取UTC时间。当然,您可以更改该值以在另一个单位中获取该值。您可以尝试以下方法将其插入到DB中:
SimpleDateFormat f = new SimpleDateFormat("h:mm a E zz");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
String dd = f.format(new Date());
此选项来自您的评论:
输出:
String dd = f.format(new Date());
Date date = null;
DateFormat sdf = new SimpleDateFormat("h:mm a E zz");
try {
date = sdf.parse(dd);
}catch (Exception e){
}
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(sdf.format(date));
UTC星期一下午1:43
为此,->再次转换并在设备的时间内显示
更新:
String dd = f.format(new Date());
Date date = null;
DateFormat sdf = new SimpleDateFormat("h:mm a E zz");
try {
date = sdf.parse(dd);
}catch (Exception e){
}
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(sdf.format(date));
输出:
String dd = f.format(new Date());
Date date = null;
DateFormat sdf = new SimpleDateFormat("h:mm a E zz");
try {
date = sdf.parse(dd);
}catch (Exception e){
}
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(sdf.format(date));
周一格林尼治标准时间下午7:30+05:30
你可以这样显示 我使用这两种方法将本地时间转换为GMT/UTC,反之亦然,这对我来说没有任何问题
public static Date localToGMT() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gmt = new Date(sdf.format(date));
return gmt;
}
将要转换为设备本地时间的GMT/UTC日期传递给此方法:
public static Date gmttoLocalDate(Date date) {
String timeZone = Calendar.getInstance().getTimeZone().getID();
Date local = new Date(date.getTime() + TimeZone.getTimeZone(timeZone).getOffset(date.getTime()));
return local
}
获取当前UTC:
public String getCurrentUTC(){
Date time = Calendar.getInstance().getTime();
SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
return outputFmt.format(time);
}
已接受答案的简化和浓缩版本:
public static Date dateFromUTC(Date date){
return new Date(date.getTime() + Calendar.getInstance().getTimeZone().getOffset(new Date().getTime()));
}
public static Date dateToUTC(Date date){
return new Date(date.getTime() - Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}
试试这个://将UTC转换为本地格式
public Date getUTCToLocalDate(String date) {
Date inputDate = new Date();
if (date != null && !date.isEmpty()) {
@SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
inputDate = simpleDateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
return inputDate;
}
//将本地日期转换为UTC
public String getLocalToUTCDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
Date time = calendar.getTime();
@SuppressLint("SimpleDateFormat") SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
return outputFmt.format(time);
}
试试这个
DateFormat formatterIST = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
formatterIST.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
Date dateobj = new Date();
Date date = formatterIST.parse(formatterIST.format(dateobj));
System.out.println(formatterIST.format(date));
DateFormat formatterUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
formatterUTC.setTimeZone(TimeZone.getTimeZone("UTC")); // UTC timezone
System.out.println(formatterUTC.format(date));
java.time
现代方法使用java.time;几年前的类取代了糟糕的日期时间类,如date
和Calendar
捕获UTC中显示的当前时刻
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
使用JDBC 4.2或更高版本的驱动程序投诉存储在数据库中
myPreparedStatement( … , odt ) ;
从数据库中检索
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
调整到一个时区
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
生成要呈现给用户的文本
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( Locale.getDefault() ) ;
String output = zdt.format( f ) ;
对于版本26之前的早期Android,使用ThreeTenABP库获取大部分java.time功能,这些功能在ThreeTen Backport项目中被后移植到java 6和java 7。假设今天的日期是星期一下午5:34(IST),那么如何获得星期一下午12:04(UTC)这样的日期在需要转换的时候,你真的有权访问一个时间对象吗?还是只有一个字符串?我只有一个string@Dyo这会帮助你解决你的问题。当试图再次转换时,它显示空指针异常。不可能,我已经尝试过了,效果很好。你能给我你的应用的堆栈跟踪吗?刚初始化的Date=new Date()和它的工作状态很好。谢谢。new Date(String Date)不推荐使用。你不应该使用它!您可以使用DateFormat.parse(字符串日期)而不是new date(字符串日期),因为它已被弃用。是的,这是一个简单的一行正确答案,好朋友。但时区#getOffset()接受UTC时间…我建议进行编辑,但已被拒绝,第一个函数(即
dateFromUTC
)存在错误。如果输入的date
参数是UTC,我们必须添加本地时间的时差以达到本地时间。然后它必须是这样的返回新日期(Date.getTime()+Calendar.getInstance().getTimeZone().getOffset(new Date().getTime())代码>。