Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不可受理日期:“2018年3月1日星期四下午12:43:38 IST”_Java_Mysql_Timestamp_Datetime Parsing - Fatal编程技术网

Java 不可受理日期:“2018年3月1日星期四下午12:43:38 IST”

Java 不可受理日期:“2018年3月1日星期四下午12:43:38 IST”,java,mysql,timestamp,datetime-parsing,Java,Mysql,Timestamp,Datetime Parsing,在将2018年3月1日星期四12:43:38 PM IST作为时间戳插入MySQL时,我遇到了一个解析异常 如何将此字符串转换为MySQL时间戳列?如果没有看到您的代码,很难确切地说出出现错误的原因,但无论如何 通常会发生解析异常,因为格式化程序/解析器类发现问题;或者您使用的模式与您试图解析的字符串不匹配,或者某些配置错误,或者诸如此类。让我们来看看: 星期的月份和日期是英文的,因此必须设置java.util.Locale,否则将使用系统的默认值 正如其他人已经说过的,IST是模棱两可的:它可

在将2018年3月1日星期四12:43:38 PM IST作为时间戳插入MySQL时,我遇到了一个解析异常


如何将此字符串转换为MySQL时间戳列?

如果没有看到您的代码,很难确切地说出出现错误的原因,但无论如何

通常会发生解析异常,因为格式化程序/解析器类发现问题;或者您使用的模式与您试图解析的字符串不匹配,或者某些配置错误,或者诸如此类。让我们来看看:

星期的月份和日期是英文的,因此必须设置java.util.Locale,否则将使用系统的默认值 正如其他人已经说过的,IST是模棱两可的:它可以指印度、以色列、爱尔兰,谁知道还有哪里。所以你也必须选择一个合适的时区——我假设你在印度,但是你可以相应地更改代码 在Java中,您可以执行以下操作:

// use English locale
SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM yyyy hh:mm:ss a zzz", Locale.ENGLISH);
// use India timezone
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));

String s = "Thursday 01 March 2018 12:43:38 PM IST";
Date date = sdf.parse(s);
Timestamp timestamp = new Timestamp(date.getTime());
但是SimpleDataFormat充满了问题:

对于Java 8或更高版本,有一个更好的API:

// use India timezone
Set<ZoneId> preferredZones = new HashSet<>();
preferredZones.add(ZoneId.of("Asia/Kolkata"));

// use English locale
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("EEEE dd MMMM yyyy hh:mm:ss a ")
    .appendZoneText(TextStyle.SHORT, preferredZones)
    .toFormatter(Locale.ENGLISH);

String s = "Thursday 01 March 2018 12:43:38 PM IST";
ZonedDateTime zdt = ZonedDateTime.parse(s, formatter);
System.out.println(zdt);

Timestamp timestamp = Timestamp.from(zdt.toInstant());
注意,我使用亚洲/加尔各答作为时区。格式为Continental/City的名称是Java使用的标准名称,而诸如IST之类的短名称是不明确的,应该避免使用。幸运的是,API提供了一种解决这种模糊性的方法,但是您必须选择适当的区域来处理

关于格式 最后,请记住日期对象没有格式:


当您将日期、时间戳或任何其他日期对象保存到数据库时,您保存的是它们的值,而这些日期不是任何特定格式。2018年3月1日星期四12:43:38 PM IST之类的字符串只是日期值的表示形式,但这并不意味着它们以该格式保存。

给出错误的代码在哪里?您可能没有指定Locale.US,以正确的语言解析日期和月份名称。2018年3月1日这样的日期不是美国日期吗?@ifly6是,但由于OP解析的是一个时区印度标准时间,OP可能正在使用一台带有hi_印地语语言环境的PC。欢迎使用Stack Overflow。你可以吗?没有它,我们就不太可能猜出哪里出了问题,因此我们无法真正帮助您。