将UTC字符串转换为UTC日期[Android-Java]

问题描述

我想将UTC时间转换为日期。它应将Date返回为

预期结果是:2020-09-01T08:44:25.654Z

输出为-> "Tue Sep 01 14:14:25 GMT+05:30 2020"

我得到UTC,但它在String中,我想要在format中使用相同的Date datatype

我希望它具有以上Date格式的UTC

有人知道如何获得吗?

public static Date convertToUtcTime(Date date) throws ParseException {
     SimpleDateFormat sdf = new SimpleDateFormat(DateFormats.yyyyMMddThhmmssZ);  //"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
     sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

     return sdf.parse(sdf.format(date));
}

我也不想使用toInstant方法

[更新]

Date strFromDate;
try {
     strFromDate = AppUtils.convertToUtcTime(myCalendar.getTime());
} catch (ParseException e) {
     e.printstacktrace();
}

然后将strFromDate传递给api请求 我没有从strFromDate获得预期的结果

解决方法

您最喜欢的演员是谁?假设它是Amitabh Bachchan。不管他扮演什么角色,他都将保持自己的身份(这就是为什么导演/制作人下一个要约去找他的原因why)。他的表演根据角色来装饰他的外表。导演使用他的表演技巧所获得的是装饰角色,按照指定角色代表他。然后,您说Amitabh Bachchan为<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>logSign</title> </head> <body> <form id="signup-form"> <input id="name1" type="text" placeholder="Username" value="" required> <input id="pass1" type="password" placeholder="Password" value="" required> <input id="signup_btn" type="submit" value="Signup"> </form> <form id="login-form"> <input id="name2" type="text" placeholder="Username" value="" required> <input id="pass2" type="password" placeholder="Password" value="" required> <input id="login_btn" type="submit" value="Login"> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> $(document).ready(function () { $("#signup-form").submit(function () { var nm1 = $("#name1").val(); var ps1 = $("#pass1").val(); localStorage.setItem("n1",nm1); localStorage.setItem("p1",ps1); }); $("#login-form").submit(function () { var enteredName = $("#name2").val(); var enteredPass = $("#pass2").val(); var storedName = localStorage.getItem("n1"); var storedPass = localStorage.getItem("p1"); if (enteredName == storedName && enteredPass == storedPass) { alert("You are logged in!"); } else { alert("Username and Password do not match!"); } }); }); </script> </body> </html>或Amitabh Bachchan为angry young man等)

类似地,无论您要求coolie采取什么样的外观(使用java.util.Date),它总是表示否。距SimpleDateFormat的毫秒数。它没有任何时区或时区偏移信息。 Java以这个毫秒为单位,根据JVM的时区来计算日期和时间,然后将获取的日期和时间与JVM的时区相结合,最后在调用其1970-01-01T00:00:00Z方法时返回字符串。我相信您已经知道,当您使用toString()打印对象时,将打印对象的System.out.println方法返回的字符串。检查this,以获取toString()的{​​{1}}实现的更多详细信息。 toString()会根据模式更改java.util.Date的外观。使用SimpeDateFormat得到的是修饰的字符串,表示根据指定模式的java.util.Date对象。然后,您说SimpeDateFormatDate模式的字符串,或者说DateEEE MMMM dd,yyyy HH:mm模式的字符串,等等。

摘要是:您无法通过指定不同的模式来更改Date对象。如果您打印它,则将始终获得其yyyy-MM-dd HH:mm:ss函数返回的字符串。如果需要其他字符串,可以使用Date

建议:

我建议您从过时且容易出错的toString()日期时间API和SimpleDateFormat切换到modern java.util日期时间API和相应的格式化API (软件包SimpleDateFormat)。从 Trail: Date Time 了解有关现代日期时间API的更多信息。

如果您的Android API级别仍不兼容Java8,请选中How to use ThreeTenABP in Android ProjectJava 8+ APIs available through desugaring