使用 IST 将字符串转换为日期
Convert string to date with IST
我正在尝试通过解析 json 字符串将字符串转换为 Asynctask 中的日期。我提到了这个 link:
How to convert "Mon Jun 18 00:00:00 IST 2012" to 18/06/2012?
//String dateStr = "Mon Jun 18 00:00:00 IST 2012";
changedDate = jsonObjectMain.getString("date");
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
Date date = (Date)formatter.parse(changedDate);
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
System.out.println("formatedDate : " + formatedDate);
当我在 android studio 中 运行 这段代码时,它给出了以下异常:
04-14 12:35:53.363 22963-22963/com.trial W/System.err:
java.text.ParseException: Unparseable date: "Mon Jun 18 00:00:00 IST
2012" (at offset 20) 04-14 12:35:53.367 22963-22963/com.trial
W/System.err: at java.text.DateFormat.parse(DateFormat.java:579)
04-14 12:35:53.367 22963-22963/com.trial W/System.err: at
com.trial.Activity.StartActivity.onClick(StartActivity.java:124)
04-14 12:35:53.367 22963-22963/com.trial W/System.err: at
android.view.View.performClick(View.java:5210) 04-14 12:35:53.367
22963-22963/com.trial W/System.err: at
android.view.View$PerformClick.run(View.java:21183) 04-14 12:35:53.367
22963-22963/com.trial W/System.err: at
android.os.Handler.handleCallback(Handler.java:739) 04-14 12:35:53.367
22963-22963/com.trial W/System.err: at
android.os.Handler.dispatchMessage(Handler.java:95) 04-14 12:35:53.367
22963-22963/com.trial W/System.err: at
android.os.Looper.loop(Looper.java:148) 04-14 12:35:53.367
22963-22963/com.trial W/System.err: at
android.app.ActivityThread.main(ActivityThread.java:5438) 04-14
12:35:53.367 22963-22963/com.trial W/System.err: at
java.lang.reflect.Method.invoke(Native Method) 04-14 12:35:53.367
22963-22963/com.trialW/System.err: at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762)
04-14 12:35:53.367 22963-22963/com.trial W/System.err: at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
但是当我 运行 通过创建简单程序在 eclipse 中使用相同的代码时,它 运行 非常好。
我很奇怪,我不知道,为什么会这样。
所以,我在另一个 Activity 中检查了相同的代码,但 没有用 。
谢谢。任何帮助将不胜感激。
尝试将格式更改为 "EEE MMM dd HH:mm:ss yyyy" 并设置 IST timeZone
changedDate = changedDate.replace("IST ", "");
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyy");
TimeZone timeZone=TimeZone.getTimeZone("IST");
formatter.setTimeZone(timeZone);
Date date = (Date)formatter.parse(changedDate);
我知道在 Android 上使用较新的 java.time
类 需要外部依赖项 (ThreeTenABP),并且您现在已经有了一个可行的解决方案。对于任何其他阅读的人来说,要么可以使用 Java 8 或更高版本,要么对库依赖感到满意,这里是如何做的:
String dateStr = "Mon Jun 18 00:00:00 IST 2012";
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss z uuuu", Locale.ENGLISH);
LocalDate date = LocalDate.parse(dateStr, inputFormat);
String formattedDate = date.format(DateTimeFormatter.ofPattern("dd/MM/uuuu"));
System.out.println(formattedDate);
如果您事先知道该字符串包含正确的日、月和年,您可以完全忽略时区。
Link:java.time
类(其中 LocalDate
只是众多帮助之一)可以用于 Android 到 the ThreeTenABP.这是 JSR-310 的 ThreeTen 和 Android Backport 的 ABP。
PS 如果您想进一步验证您的输入字符串,您可以检查时间部分是否等于指定时区中一天的开始:
ZonedDateTime zdt = ZonedDateTime.parse(dateStr, inputFormat);
if (! zdt.equals(zdt.toLocalDate().atStartOfDay(zdt.getZone()))) {
throw new IllegalArgumentException("Input date was not at midnight");
}
我正在尝试通过解析 json 字符串将字符串转换为 Asynctask 中的日期。我提到了这个 link: How to convert "Mon Jun 18 00:00:00 IST 2012" to 18/06/2012?
//String dateStr = "Mon Jun 18 00:00:00 IST 2012";
changedDate = jsonObjectMain.getString("date");
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
Date date = (Date)formatter.parse(changedDate);
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
System.out.println("formatedDate : " + formatedDate);
当我在 android studio 中 运行 这段代码时,它给出了以下异常:
04-14 12:35:53.363 22963-22963/com.trial W/System.err: java.text.ParseException: Unparseable date: "Mon Jun 18 00:00:00 IST 2012" (at offset 20) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at java.text.DateFormat.parse(DateFormat.java:579) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at com.trial.Activity.StartActivity.onClick(StartActivity.java:124) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at android.view.View.performClick(View.java:5210) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at android.view.View$PerformClick.run(View.java:21183) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at android.os.Looper.loop(Looper.java:148) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5438) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at java.lang.reflect.Method.invoke(Native Method) 04-14 12:35:53.367 22963-22963/com.trialW/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762) 04-14 12:35:53.367 22963-22963/com.trial W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
但是当我 运行 通过创建简单程序在 eclipse 中使用相同的代码时,它 运行 非常好。
我很奇怪,我不知道,为什么会这样。 所以,我在另一个 Activity 中检查了相同的代码,但 没有用 。
谢谢。任何帮助将不胜感激。
尝试将格式更改为 "EEE MMM dd HH:mm:ss yyyy" 并设置 IST timeZone
changedDate = changedDate.replace("IST ", "");
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyy");
TimeZone timeZone=TimeZone.getTimeZone("IST");
formatter.setTimeZone(timeZone);
Date date = (Date)formatter.parse(changedDate);
我知道在 Android 上使用较新的 java.time
类 需要外部依赖项 (ThreeTenABP),并且您现在已经有了一个可行的解决方案。对于任何其他阅读的人来说,要么可以使用 Java 8 或更高版本,要么对库依赖感到满意,这里是如何做的:
String dateStr = "Mon Jun 18 00:00:00 IST 2012";
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss z uuuu", Locale.ENGLISH);
LocalDate date = LocalDate.parse(dateStr, inputFormat);
String formattedDate = date.format(DateTimeFormatter.ofPattern("dd/MM/uuuu"));
System.out.println(formattedDate);
如果您事先知道该字符串包含正确的日、月和年,您可以完全忽略时区。
Link:java.time
类(其中 LocalDate
只是众多帮助之一)可以用于 Android 到 the ThreeTenABP.这是 JSR-310 的 ThreeTen 和 Android Backport 的 ABP。
PS 如果您想进一步验证您的输入字符串,您可以检查时间部分是否等于指定时区中一天的开始:
ZonedDateTime zdt = ZonedDateTime.parse(dateStr, inputFormat);
if (! zdt.equals(zdt.toLocalDate().atStartOfDay(zdt.getZone()))) {
throw new IllegalArgumentException("Input date was not at midnight");
}