Java 从日期字符串获取月份
我有一个日期为“10/10/2020”(假设它们总是用/)的字符串输入,我试图将每个类别存储在一个私有int变量中,该变量已定义为月、日和年 我使用parseInt、indexOf和substring方法查找月份并将其存储在month变量中,但我很难弄清楚如何让程序读取当天。我们假设月和日可以是“00”或“0”格式 这是我从字符串中读取月份的方式,这是我到目前为止读取的日期,但我得到了一个错误 java.lang.StringIndexOutOfBoundsException:开始2,结束0,长度8 这是我到目前为止的代码,请让我知道我犯了什么错误Java 从日期字符串获取月份,java,string,date,date-format,dateformatter,Java,String,Date,Date Format,Dateformatter,我有一个日期为“10/10/2020”(假设它们总是用/)的字符串输入,我试图将每个类别存储在一个私有int变量中,该变量已定义为月、日和年 我使用parseInt、indexOf和substring方法查找月份并将其存储在month变量中,但我很难弄清楚如何让程序读取当天。我们假设月和日可以是“00”或“0”格式 这是我从字符串中读取月份的方式,这是我到目前为止读取的日期,但我得到了一个错误 java.lang.StringIndexOutOfBoundsException:开始2,结束0,长
int firstSlash = date.indexOf("/");
int secondSlash = date.indexOf("/", firstSlash);
month = Integer.parseInt (date.substring (0, firstSlash));
day = Integer.parseInt (date.substring(firstSlash+1, secondSlash-1));
我不想要答案,但请帮助我理解出错的逻辑,因为根据我的理解,我似乎正在获取第一个和第二个斜杠之间的索引值,并将字符串值转换为整数。- 首先,您需要从找到的第一个
的下一个索引中搜索,这意味着您应该在/
中使用date.indexOf(“/”,firstSlash)
firstSlash+1
的第二个参数是独占的,因此您需要在.substring()
中使用date.substring(firstSlash+1,secondSlash-1)
而不是secondSlash
secondSlash-1
String date = "10/10/2020";
int firstSlash = date.indexOf("/");
int secondSlash = date.indexOf("/", firstSlash + 1);
int month = Integer.parseInt (date.substring (0, firstSlash));
int day = Integer.parseInt (date.substring(firstSlash+1, secondSlash));
最好使用
LocalDate
存储日期,并使用DateTimeFormatter
解析日期。惯用的方法是使用日期时间API,例如和,如下所示:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String strDate = "10/10/2020";
LocalDate date = LocalDate.parse(strDate, DateTimeFormatter.ofPattern("M/d/u"));
int year = date.getYear();
int month = date.getMonthValue();
int dayOfMonth = date.getDayOfMonth();
System.out.println("Year: " + year + ", Month: " + month + ", Day of month: " + dayOfMonth);
}
}
输出:
Year: 2020, Month: 10, Day of month: 10
有关现代日期时间API的更多信息,请访问
我不想要答案,但请帮我理解这个问题的逻辑
我错在哪里,因为
这就是我和我们喜欢的态度,一个真正的学习者的态度。我将提供有用的信息和链接,而不是为您解决您的错误
LocalDate
类获取日期及其getMonth
或getMonthValue
方法获取月份。time可以解析日期字符串,其中月份和日期可以是“00”或“0”格式。如果你尝试了,但遇到了疑问,欢迎你提出新问题
你的代码出了什么问题
这应该足以识别代码中的缺陷:
String.indexOf(String,int)
从给定的索引中搜索字符串。如果搜索的子字符串位于指定的索引处,则返回相同的索引substring(int,int)
为您提供从包含索引的from到包含索引的to的子字符串。to索引必须至少与from索引一样大,否则将抛出StringIndexOutOfBoundsException
。异常消息提到了传递给substring()
的两个索引,这可能会让您有机会回顾它们的来源- 对于java.time
- 有关使用一位或两位数字解析日期的相关问题:
- 用于字符串索引
/
found means的下一个索引中搜索firstSlash+1
。您当前正在从找到的第一个索引/
进行搜索,因此它将再次返回该索引。像date这样拆分日期并不容易。拆分(“/”
?@FSm OP要求了解此代码的实际错误。我知道你的意思是String[]splited=date.split(“/”);int month=Integer.parseInt(拆分为[0]);int day=Integer.parseInt(拆分为[1])代码>