我有一个遗留的 Web 应用程序,其中的 Java 代码是在 Java 5 中编译和运行的,当尝试构建新环境以在 Java 12 中运行相同的代码时,我遇到了日期格式问题。我已经在 Java 5、7、8、9、10、11、12 中对此进行了测试,并且使用 Java 9 或更高版本时代码行为会发生变化。
我无法更改 Web 应用程序的 Java 源代码。
问题与使用 java.text.DateFormat 和 parse(String) 方法有关。
这个小测试应用程序显示了这个问题:
import java.util.*;
import java.text.*;
public class LocaleAndDateTester {
public LocaleAndDateTester() {
}
public static final void main(String[] argv) {
LocaleAndDateTester a = new LocaleAndDateTester();
a.go();
}
private void go() {
System.out.println("Locale country: " + Locale.getDefault().getDisplayCountry());
java.text.DateFormat df = java.text.DateFormat.getDateInstance();
String[] dateToTest = {"01-JAN-2020", "12-SEP-2019", "12/SEP/2019", "12/09/2019",
"September 12, 2019", "Sep 12, 2019", …Run Code Online (Sandbox Code Playgroud) 我已经创建了这个函数来解析日期,但这给出了异常:Unparseable date:"Fri Oct 10 23:11:07 IST 2014"(在偏移20处).请帮忙,因为我无法弄清楚这段代码有什么问题.
public Date parseDate() {
String strDate ="Fri Oct 10 23:11:29 IST 2014";
String newPattern = "EEE MMM dd HH:mm:ss Z yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
try {
Date date = formatter.parse(strDate);
return date;
} catch (java.text.ParseException e) {
e.printStackTrace();
}
return null;
}
Run Code Online (Sandbox Code Playgroud) 我有点使用以下源来创建我自己的 sdf 模式:https : //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/text/SimpleDateFormat.html
很遗憾
SimpleDateFormat mFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
...
private Date getLatestTimeStamp() throws ParseException {
return mFormatter.parse("Mon, 19 Dec 2019 11:32:04 +0000");
}
Run Code Online (Sandbox Code Playgroud)
导致以下错误,我不明白为什么:
java.text.ParseException: Unparseable date: "Mon, 19 Dec 2019 11:32:04 +0000"
Run Code Online (Sandbox Code Playgroud)
任何帮助都是极好的!
编辑:我正在使用 JDK 13
编辑2:
因此,我清理了我的代码,创建了一个新项目,但它仍然无法正常工作:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String source = "Thu, 19 Dec 2019 11:32:04 +0000";
DateTimeFormatter mFormatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z"); …Run Code Online (Sandbox Code Playgroud) 我有问题SimpleDateFormat。
SimpleDateFormat dtfmt=new SimpleDateFormat("dd MMM yyyy hh:mm a", Locale.getDefault());
Date dt=dtfmt.parse(deptdt);
Run Code Online (Sandbox Code Playgroud)
在 Android 模拟器中工作正常,但在手机中出现此错误:
W/System.err: java.text.ParseException: Unparseable date: "24 Oct 2016 7:31 pm" (at offset 3) W/System.err: at java.text.DateFormat.parse(DateFormat.java:579)
有什么解决办法吗?
2017-01-02T01:41:24Z是我的实际日期格式,我想以yyyy-MM-dd hh:mma格式转换此日期。
请参阅我到目前为止尝试过的以下代码,
String newsDate = "2017-01-02T01:41:24Z";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mma");
Date date = null;
try
{
date = sdf.parse(newsDate);
}
catch (ParseException e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但在date = sdf.parse(newsDate);一行我收到以下错误:
“无法解析的日期:“2017-01-02T01:41:24Z”(偏移量 10)”。
请指导我,我哪里出错了?
我只想要Month,Year明智的输出,但我遇到了问题.这是一个Exception的Unparseable date: "Apr 5, 2018".我已将日期存储在Bill_DateColumn中sqlite,并且其格式"Apr 5, 2018"在其字段中.那么我怎样才能只获得该格式的月份和年份(Apr, 2018).这是我的代码如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
public class Demo2 {
private static Connection con;
private static String query;
private static PreparedStatement PStat,PStat2;
private static ResultSet res,res2;
private static String Bill_Date;
public static void main(String args[])
{
try
{
con=Database.Database();
query="select …Run Code Online (Sandbox Code Playgroud)