[英]Parse a date from a string
我有这样的字符串:
String strDateTimeStamp = "2016-02-29 18:31:51";
现在,我想提取它以获得以下格式的结果:
String strYear = "2016";
String strMonth = "02";
String strDate = "29";
String strHour = "18";
String strMinute = "31";
String strSecond = "51";
如果您使用日期,则应考虑使用Calendar:
String strDateTimeStamp = "2016-02-29 18:31:51";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse(strDateTimeStamp);
Calendar cal = new Calendar.Builder().setInstant(date).build();
String strYear = Integer.toString(cal.get(Calendar.YEAR));
// Calendar MONTH is starting from 0 we need to add 1
String strMonth = Integer.toString(cal.get(Calendar.MONTH) + 1);
String strDate = Integer.toString(cal.get(Calendar.DATE));
String strHour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY));
String strMinute = Integer.toString(cal.get(Calendar.MINUTE));
String strSecond = Integer.toString(cal.get(Calendar.SECOND));
使用java.util.Date
和java.text.DateFormat
/ .SimpleDateFormat
所有答案均已过时。 这些旧的日期时间类设计不良,令人困惑且麻烦。 避免他们。
java.time框架内置于Java 8及更高版本中。 与旧的日期时间类相比有了很大的改进。
大部分的java.time功能后移植到Java 6和7 ThreeTen,反向移植 ,并进一步适应的Android在ThreeTenABP (见如何使用...... )。
首先,将输入字符串中间的SPACE替换为T
以符合ISO 8601标准。 解析/生成字符串时,java.time类中默认使用这些标准格式。
String input = "2016-02-29 18:31:51".replace( " " , "T" );
解析为LocalDateTime
。 “本地”表示不与任何时区关联。 因此,这不是时间表上的实际时刻。 但显然在本课题中不是问题。
LocalDateTime ldt = LocalDateTime.parse( input );
现在,您可以通过调用各种getter方法来索要各种组件。 这些方法返回一个int
原语 ,您当然可以将其转换为String值。
getYear
getMonthValue
(或对Month
枚举使用getMonth
) getDayOfMonth
(以及DayOfWeek
枚举的getDayOfWeek
) getHour
getMinute
getSecond
getNano
(几分之一秒) 您可以通过拆分String
来做到这一点
String[] splittedString = strDateTimeStamp.split("-|:|\\s");
String strYear = splittedString[0];
String strMonth = splittedString[1];
String strDate = splittedString[2];
String strHour = splittedString[3];
String strMinute = splittedString[4];
String strSecond = splittedString[5];
首先在空格..的基础上使用split(" ")
分割字符串,它将为您提供长度为2的字符串数组。 其中包含(2016-03-04)
和(16:32:33)
。 然后分别使用split("-")
和split(":")
再次分割两个字符串。 您将得到答案。 请尝试自己编写代码可能对您更好。
尝试这个..
String CurrentString = "2016-02-29 18:31:51";
String[] separated = CurrentString.split(" ");
String date = separated[0];
String time = separated[1];
String[] separated_date = date.split("-");
String[] separated_time = time.split(":");
String strYear = separated_date[0];
String strMonth = separated_date[1];
String strDate = separated_date[2];
String strHour = separated_time[0];
String strMinute = separated_time[1];
String strSecond = separated_time[2];
我建议将正则表达式与“ [-:]”等模式一起使用
public static void main(String[] args) {
String strDateTimeStamp = "2016-02-29 18:31:51";
String[] solution = strDateTimeStamp.split("[- :]");
for (int i = 0; i < solution.length; i++) {
System.out.println(solution[i]);
}
}
这将生成包含您需要的所有元素的数组
String strDateTimeStamp = "2016-02-29 18:31:51";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse(strDateTimeStamp);
Calendar cal = new Calendar.Builder().setInstant(date).build();
String strYear = Integer.toString(cal.get(Calendar.YEAR));
// Calendar MONTH is starting from 0 we need to add 1
String strMonth = Integer.toString(cal.get(Calendar.MONTH) + 1);
String strDate = Integer.toString(cal.get(Calendar.DATE));
String strHour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY));
String strMinute = Integer.toString(cal.get(Calendar.MINUTE));
String strSecond = Integer.toString(cal.get(Calendar.SECOND));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.