我试图在波兰语区域设置中以d MMMM yyyy格式解析日期(2020年12月3日),但无法解析。但是为什么在所有其他语言环境(例如英语等)中,相同的解析仍然可以正常工作。下面是无法正常工作的代码示例。有人可以帮忙吗?
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();
}
似乎您对解析和格式化感到困惑。
由于输入了日期字符串English
,因此您需要使用Locale.ENGLISH
进行解析,并且需要SimpleDateFormat
with的另一个实例来使用Locale("pl", "PL")
格式化获取的java.util.Date
对象new 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
我相信您已经知道,日期时间对象仅存储日期时间信息* 1,不存储格式信息。在打印时,日期时间对象将打印toString
由其类的实现返回的字符串。此外,java.util.Date
对象并不代表真正的日期时间类,因为它仅存储毫秒(例如,new Date()
对象使用的毫秒数实例化January 1, 1970, 00:00:00 GMT
),并且在打印时,它会在JVM的时区中计算日期时间并打印相同,即如果您在世界任何地方的给定时刻执行以下两行,
Date date = new Date();
System.out.println(date.getTime());
您将获得相同的号码。查看此答案以获取演示。
的日期时间APIjava.util
及其格式APISimpleDateFormat
已经过时,由于存在如此多的此类骇客,因此容易出错。建议完全停止使用它们,并切换到现代日期时间API。在Trail:Date Time上了解有关现代日期时间API的更多信息。
注意:如果您正在为一个Android项目工作,并且您的Android API级别仍不兼容Java-8,请检查可通过desugaring获得的Java 8+ API和如何在Android Project中使用ThreeTenABP。
使用现代的日期时间API:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句