You're attempting to parse a date-time string "24 Oct 2016 7:31 pm" with a date-time formatter dtfmt instantiated with the default locale. However, when the code runs on a phone, it encounters a ParseException exception with the message "java.text.ParseException: Unparseable date: java.text.DateFormat.parse(DateFormat.java:579)".
The crucial detail in this exception message is that the system tries to apply the default Locale when parsing the date, which is not what we anticipated. By default, the Android's Locale is set to match the system's language and regional settings. For many devices, this will be a Locale other than English, resulting in the parsing failure.
Always specify the Locale explicitly when creating a date-time formatter, whether it's SimpleDateFormat or DateTimeFormatter. In your case, you can set the locale to Locale.ENGLISH as follows:
SimpleDateFormat dtfmt=new SimpleDateFormat("dd MMM yyyy hh:mm a", Locale.ENGLISH);<br>
This specifies that the date-time parser should use the English language conventions to parse the date-time string. This will ensure that the same date-time string is parsed correctly regardless of the system's locale settings.
The above is the detailed content of Why Does My Date Parsing Fail on Different Locales?. For more information, please follow other related articles on the PHP Chinese website!