无法在Java中的波兰语言环境中分析格式为d MMMM yyyy的日期
我试图在波兰语言环境中解析格式为d MMMM yyyy的日期(2020年12月3日),但无法解析。但是,为什么相同的解析在任何其他语言环境(如英语等)中都能正常工作呢?下面是不起作用的代码示例。有人能帮忙吗无法在Java中的波兰语言环境中分析格式为d MMMM yyyy的日期,java,date,locale,date-format,polish,Java,Date,Locale,Date Format,Polish,我试图在波兰语言环境中解析格式为d MMMM yyyy的日期(2020年12月3日),但无法解析。但是,为什么相同的解析在任何其他语言环境(如英语等)中都能正常工作呢?下面是不起作用的代码示例。有人能帮忙吗 Locale loc = new Locale("pl", "PL"); String date = "3 December 2020"; SimpleDateFormat sdFormat =
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdFormat =
new SimpleDateFormat("d MMMM yyyy", loc);
sdFormat.setLenient(false);
try {
Date d = sdFormat.parse(date);
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
当试图确定解析问题时,请始终执行相反的操作,即生成输出,以查看解析输入的外观。这是一种非常适用于所有解析相关问题的技术,无论是解析日期字符串、XML文档、JSON文本等 因此,我们尝试使用给定格式打印日期值,以查看解析时的预期结果:
Locale loc=新的语言环境(“pl”、“pl”);
SimpleDataFormat sdFormat=新的SimpleDataFormat(“d MMMM yyyy”,loc);
sdFormat.setLenient(false);
Calendar cal=Calendar.getInstance(loc);
cal.clear();
cal.set(2020年,日历12月3日);
System.out.println(sdFormat.format(cal.getTime());
在Java7中,我得到了3 grudzień2020
在Java8、9、11和14中,我得到了
3 grudnia2020
如果您想解析
2020年12月3日
,那么在尝试确定解析问题时,请使用例如Locale.ENGLISH
,始终执行相反的操作,即生成输出,以查看解析输入的外观。这是一种非常适用于所有解析相关问题的技术,无论是解析日期字符串、XML文档、JSON文本等
因此,我们尝试使用给定格式打印日期值,以查看解析时的预期结果:
Locale loc=新的语言环境(“pl”、“pl”);
SimpleDataFormat sdFormat=新的SimpleDataFormat(“d MMMM yyyy”,loc);
sdFormat.setLenient(false);
Calendar cal=Calendar.getInstance(loc);
cal.clear();
cal.set(2020年,日历12月3日);
System.out.println(sdFormat.format(cal.getTime());
在Java7中,我得到了3 grudzień2020
在Java8、9、11和14中,我得到了
3 grudnia2020
如果您想解析2020年12月3日的
由于您的输入日期字符串是用English
,因此需要使用Locale.English
进行解析,并且需要另一个SimpleDataFormat
实例和Locale(“pl”、“pl”)
来格式化获得的java.util.date
对象和新的Locale(“pl”、“pl”)
演示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
输出:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
我相信您已经知道,日期时间对象只存储日期时间信息*1,而不存储格式信息。打印时,日期时间对象打印其类的toString
实现返回的字符串。另外,java.util.Date
对象并不表示真正的日期时间类,因为它只存储毫秒数(例如,new Date()
对象是从1970年1月1日00:00:00 GMT
开始以毫秒数实例化的),当您打印它时,它计算JVM时区中的日期和时间,并打印相同的日期和时间,即如果您在世界任何地方的给定时刻执行以下两行
Date date = new Date();
System.out.println(date.getTime());
你会得到同样的号码。查看演示
java.util
的日期时间API及其格式化APISimpleDataFormat
已经过时,而且由于此类黑客太多,它们很容易出错。建议完全停止使用,并切换到。有关现代日期时间API的更多信息,请访问
注意:如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并重试
使用现代日期时间API:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
输出:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
*1同时存储时区信息。查看以了解有关这些类的更多信息。您似乎对解析和格式设置感到困惑
由于您的输入日期字符串是用English
,因此需要使用Locale.English
进行解析,并且需要另一个SimpleDataFormat
实例和Locale(“pl”、“pl”)
来格式化获得的java.util.date
对象和新的Locale(“pl”、“pl”)
演示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
输出:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
我相信您已经知道,日期时间对象只存储日期时间信息*1,而不存储格式信息。打印时,日期时间对象打印其类的toString
实现返回的字符串。另外,java.util.Date
对象并不表示真正的日期时间类,因为它只存储毫秒数(例如,new Date()
对象是从1970年1月1日00:00:00 GMT
开始以毫秒数实例化的),当您打印它时,它计算JVM时区中的日期和时间,并打印相同的日期和时间,即如果您在世界任何地方的给定时刻执行以下两行
Date date = new Date();
System.out.println(date.getTime());
你会得到同样的号码。查看演示
java.util
的日期时间API及其格式化APISimpleDataFormat
已经过时,而且由于此类黑客太多,它们很容易出错。建议完全停止使用,并切换到。有关现代日期时间API的更多信息,请访问
注意:如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并重试
使用现代日期时间API:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
输出:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH);
SimpleDateFormat sdfForFormatting = new SimpleDateFormat("d MMMM yyyy", loc);
sdfForParsing.setLenient(false);
try {
Date d = sdfForParsing.parse(date);
System.out.println(d);
String localiseByPolish = sdfForFormatting.format(d);
System.out.println(localiseByPolish);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Thu Dec 03 00:00:00 GMT 2020
3 grudnia 2020
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale loc = new Locale("pl", "PL");
String date = "3 December 2020";
DateTimeFormatter dtfForParsing = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH)
.withResolverStyle(ResolverStyle.LENIENT);
DateTimeFormatter dtfForFormatting = DateTimeFormatter.ofPattern("d MMMM yyyy", loc);
LocalDate localeDate = LocalDate.parse(date, dtfForParsing);
System.out.println(localeDate);
String localiseByPolish = localeDate.format(dtfForFormatting);
System.out.println(localiseByPolish);
}
}
2020-12-03
3 grudnia 2020
*1同时存储时区信息。查看以了解有关th的更多信息