英文:
How to convert String Jul 21, 2020, 7:53:14 PM into "DD/MM/YYYY a" format in java
问题
I have a string as "Jul 22, 2020, 11:56:51 PM" and I want to convert it into "DD/MM/YYYY a" format so that the output is "22/07/2020 11:56:51 PM".
I have tried but it gives me a time difference of 5:30 hours. I want to have the same date.
ExportObj
has a propertydate
which is of typeString
.
Output I'm getting is - 07/22/2020 06:26 PM
public class Export {
public static void main(String[] args) {
SimpleDateFormat sf = new SimpleDateFormat(user.getDateFormatWithTime());
String id = String.valueOf(currentUser.getTimeZoneId());
TimeZone timeZone = TimeZone.getTimeZone(id);
sf.setTimeZone(timeZone);
ExportObj obj = new ExportObj();
obj.setDate(sf.format(new Date()));
System.out.println(obj.getDate());
}
}
英文:
I have a string as "Jul 22, 2020, 11:56:51 PM" and I want to convert it into "DD/MM/YYYY a" format so that the output is 22/07/2020 11:56:51 PM.
I have tried but it gives me a time difference of 5:30 hours. I want to have the same date.
> ExportObj
has a property date
which is of type String
.
Output I'm getting is - 07/22/2020 06:26 PM
public Class Export {
public static void main(string[] args){
SimpleDateFormat sf = new SimpleDateFormat(user.getDateFormatWithTime());
String id = String.valueOf(currentUser.getTimeZoneId());
TimeZone timeZone = TimeZone.getTimeZone(id);
sf.setTimeZone(timeZone);
ExportObj obj = new ExportObj();
obj.setDate(sf.format(new Date()));
System.out.println(obj.getDate());
}
}
答案1
得分: 1
不应将日期和时间作为 String
存储在您的 ExportObj
中。就像您将数字存储在 int
和 double
变量中,将布尔值存储在 boolean
变量中一样(我希望如此),请使用适当的日期时间类型来表示日期和时间。在这种情况下,ZonedDateTime
可能最适合,但根据具体情况和精确要求,您可以考虑使用 Instant
或来自 java.time
(现代Java日期和时间API)的其他类。
当您需要向用户显示日期和时间时,请将日期时间格式化为适合该目的的字符串。
java.time
对于日期和时间操作,请使用 java.time
,这是现代的Java日期和时间API。对于您的转换:
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("MMM d, uuuu, hh:mm:ss a", Locale.ENGLISH);
DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu hh:mm:ss a", Locale.ENGLISH);
String id = "Etc/UTC";
String stringWeveGot = "Jul 22, 2020, 11:56:51 PM";
ZoneId zone = ZoneId.of(id);
ZonedDateTime dateTime = LocalDateTime.parse(stringWeveGot, sourceFormatter)
.atZone(zone);
System.out.println(dateTime);
String convertedString = dateTime.format(targetFormatter);
System.out.println(convertedString);
输出:
> 2020-07-22T23:56:51Z[Etc/UTC]
> 22/07/2020 11:56:51 PM
正如我所说,请将 ZonedDateTime
对象放入您的 ExportObj
对象中,而不是字符串。
在您的代码中出了什么问题?
很难确定发生了什么问题,因为您的代码不完整,我无法运行它。您可能只将时区应用于其中一个格式化程序,而另一个格式化程序可能使用不同的时区,例如您的JVM的默认时区,导致不希望的时区转换。java.time
的 ZonedDateTime
更容易处理此情况,因为与老式的 Date
类不同,它将时区保存在日期时间对象内部,而不是在格式化程序中。
链接
- Oracle教程:日期时间 解释了如何使用
java.time
。
英文:
You should not keep date and time as a String
in your ExportObj
. Just as you keep numbers in int
and double
variables and Boolean values in boolean
variables (I hope), use proper date-time types for your dates and times. In this case a ZonedDateTime
is probably best suited, but depending on circumstances and precise requirements you may consider Instant
or some other class from java.time, the modern Java date and time API.
When you need to show the date and time to a user, format the date-time into an appropriate string for that purpose.
java.time
Use java.time, the modern Java date and time API, for your date and time work. For your conversion:
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("MMM d, uuuu, hh:mm:ss a", Locale.ENGLISH);
DateTimeFormatter targetormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu hh:mm:ss a", Locale.ENGLISH);
String id = "Etc/UTC";
String stringWeveGot = "Jul 22, 2020, 11:56:51 PM";
ZoneId zone = ZoneId.of(id);
ZonedDateTime dateTime = LocalDateTime.parse(stringWeveGot, sourceFormatter)
.atZone(zone);
System.out.println(dateTime);
String convertedString = dateTime.format(targetormatter);
System.out.println(convertedString);
Output:
> 2020-07-22T23:56:51Z[Etc/UTC]
> 22/07/2020 11:56:51 PM
As I said, put the ZonedDateTime
object into your ExportObj
object, not the string.
What went wrong in your code?
It’s a bit hard for me to be sure what happened when you got a time that was 5 hours 30 minutes too early since your code isn’t complete and I cannot run it. You probably applied your time zone to only one of your formatters, leaving the other one to use a different time zone, for example the default time zone of your JVM, giving rise to an unwanted conversion between those time zones. ZonedDateTime
of java.time makes this situation easier to handle since contrary to the old-fashioned Date
class it keeps the time zone inside the date-time object rather than in the formatters.
Link
- Oracle tutorial: Date Time explaining how to use java.time.
答案2
得分: 0
public class Test {
public static void main(String[] args) throws ParseException {
final String OLD_FORMAT = "MMM dd, yyyy, hh:mm:ss a";
final String NEW_FORMAT = "dd/MM/yyyy hh:mm:ss a";
String oldDateString = "Jul 22, 2020, 11:56:51 PM";
String newDateString;
SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d = sdf.parse(oldDateString);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
System.out.println(newDateString);
}
}
Output:
22/07/2020 11:56:51 PM
英文:
Run this :
public class Test {
public static void main(String [] args) throws ParseException {
final String OLD_FORMAT = "MMM dd, yyyy, hh:mm:ss a";
final String NEW_FORMAT = "dd/MM/yyyy hh:mm:ss a";
String oldDateString = "Jul 22, 2020, 11:56:51 PM";
String newDateString;
SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d = sdf.parse(oldDateString);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
System.out.println(newDateString);
}
Output :
22/07/2020 11:56:51 PM
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论