在 Java 中将字符串转换为 LocalDate
本篇文章通过 Java 示例介绍了 String 到 LocalDate
的转换。
LocalDate
是 Java 中的一个类,它帮助我们表示本地日期。表示日期的格式是 yyyy-mm-dd
。
有时,我们可能希望将 String 转换为 LocalDate
以使用 LocalDate
类提供的功能。在本教程中,我们将看到将 String 转换为 LocalDate
的各种方法。
日期可以用多种格式表示;我们需要创建一个格式化程序实例。我们可以使用 DateTimeFormatter
类创建格式化程序。
然后我们将格式化程序实例传递给 LocalDate.parse()
方法。如果传递的字符串不可解析,则 LocalDate.parse()
方法将抛出 DateTimeParseException
。
请注意,解析等于将 String 转换为日期,而格式化则意味着将日期转换为 Java 中的 String。
使用 Java 中的 parse()
方法将字符串转换为 LocalDate
如果日期是 ISO 本地日期格式(yyyy-mm-dd
),我们不需要设置格式。我们可以直接将 String 解析为返回本地日期的 parse()
方法。
请参见下面的示例。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "2021-12-21";
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date);
System.out.println(local_date);
}
}
输出:
2021-12-21
使用 Java 中的 parse()
和 ofPattern()
方法将字符串转换为 LocalDate
如果 String 日期不是 ISO 格式,我们需要使用 DateTimeFormatter.ofPattern()
方法转换其格式,然后通过传递格式类型作为参数调用 parse()
方法。
请参见下面的示例。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "21/12/2021";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
2021-12-21
在 Java 中转换有月份的字符串日期为字符串名称
如果字符串日期有一个月份名称,如 Jan
、Feb
、Mar
等,那么我们需要使用带有 MMM
参数的 ofPattern()
方法,该方法仅在没有错误的情况下工作如果默认语言环境是 Locale.English
或 Locale.US
。
换句话说,语言环境应该理解编写月份以解析字符串的语言。区域设置是表示特定地理、经济或文化区域的对象。
看看下面的代码。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "21-Dec-2021";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
2021-12-21
请注意,上述格式区分大小写。如果我们写 dec
而不是 Dec
,我们会得到一个异常。
请参见下面的示例。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "21-dec-2021";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
Exception in thread "main" java.time.format.DateTimeParseException: Text '21-dec-2021' could not be parsed at index 3
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
at java.base/java.time.LocalDate.parse(LocalDate.java:430)
at SimpleTesting.main(SimpleTesting.java:8)
现在让我们将默认语言环境更改为另一个不懂英语的国家,例如中国。我们通过使用 Locale.setDefault()
方法并将所需的语言环境作为参数传递,在本例中为 Locale.CHINESE
。
看看下面的代码。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
public static void main(String args[]) {
Locale.setDefault(Locale.CHINESE); // setting locale as chinese
String JE_date = "21-Dec-2021";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
Exception in thread "main" java.time.format.DateTimeParseException: Text '21-Dec-2021' could not be parsed at index 3
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
at java.base/java.time.LocalDate.parse(LocalDate.java:430)
at SimpleTesting.main(SimpleTesting.java:10)
在上面的代码中,我们得到一个错误,因为中文语言环境不理解英文,因此它无法理解月份的名称。假设我们的字符串是法语:21-mai-2021
,然后要将其转换为日期,我们需要将 Locale.FRANCE
作为参数传递给 ofPattern()
方法。
请参见下面的示例。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "21-mai-2021";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.FRANCE);
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
2021-05-21
因此,为避免异常,当日期包含英文单词时,将 Locale.US
作为参数传递。
将具有日和月的字符串日期转换为 Java 中的字符串名称
字符串日期可以包含日期和月份名称作为英文缩写,例如 Tue, Dec 21, 2021
。要将此日期转换为本地日期,就像前面的情况一样,我们可以使用 ofPattern()
方法轻松转换此格式。
请参见下面的示例。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "Tue, Dec 21 2021";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("E, MMM d yyyy", Locale.US);
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
2021-12-21
请注意
,我们已将Locale.US
作为参数传递给ofPattern()
方法。如果默认语言环境不是英语,这是为了防止异常。
在 Java 中将有时间的字符串日期转换为 LocalDate
字符串日期也可能与日期有时间,例如 Tuesday, Dec 21, 2021, 10:30:15 PM
。要转换这个日期,我们需要先在 ofPattern()
方法中设置格式,然后使用 parse()
方法获取本地日期。
请参见下面的示例。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
public static void main(String args[]) {
String JE_date = "Tuesday, Dec 21, 2021 10:30:15 PM";
DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("EEEE, MMM d, yyyy hh:mm:ss a", Locale.US);
// parsing the string to convert it into date
LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
System.out.println(local_date);
}
}
输出:
2021-12-21
结论
本文讨论了在 Java 中将 String 转换为 LocalDate
。除了上面讨论的格式之外,还可以使用其他几种格式来获取日期。
相关文章
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
仅在 MySQL 中按日期对日期时间列进行分组
发布时间:2023/05/09 浏览次数:75 分类:MySQL
-
本篇文章使用 GROUP BY 子句、COUNT() 和 DATE() 函数仅在 MySQL 中按 DATE 对 DATETIME 类型列进行分组。
在 MySQL 中插入多个表
发布时间:2023/05/09 浏览次数:133 分类:MySQL
-
本篇文章将介绍在 MySQL 中插入多个表的事务和存储过程。在 MySQL 中插入多个表 无法将单个MySQL命令插入到多个表中,但是我们可以使用MySQL事务来满足项目需求。
在 Ubuntu 中重置 MySQL root 密码
发布时间:2023/05/09 浏览次数:70 分类:MySQL
-
本篇文章介绍了我们需要在 Ubuntu 中重置 MySQL root 密码的两种情况。 第一,当我们忘记了root密码,想要重新设置; 其次,当我们无法使用 mysql_secure_installation 设置 root 密码时。
在 MySQL 中计算百分比
发布时间:2023/05/09 浏览次数:131 分类:MySQL
-
我们将使用一个或多个列来计算 MySQL 中的百分比。 有不同的方法可以做到这一点,对于每种方法,我们都将使用一个示例表。在 MySQL 中使用一列来计算百分比