我有这样的字符串:
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";
答案 0 :(得分:5)
如果您正在使用日期,则应考虑使用日历:
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));
答案 1 :(得分:3)
使用java.util.Date
和java.text.DateFormat
/ .SimpleDateFormat
的所有答案都已过时。那些旧的日期时间类设计很差,令人困惑,而且很麻烦。避免它们。
java.time框架内置于Java 8及更高版本中。与旧的日期时间类相比有了很大的改进。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。
首先,用T
替换输入字符串中间的SPACE以符合ISO 8601标准。在解析/生成字符串时,默认情况下在java.time类中使用这些标准格式。
String input = "2016-02-29 18:31:51".replace( " " , "T" );
解析为LocalDateTime
。 “本地”表示与任何时区无关。所以这是不时间轴上的实际时刻。但在本课题的背景下显然不是问题。
LocalDateTime ldt = LocalDateTime.parse( input );
现在,您可以通过调用各种getter方法,根据需要询问各种部分。这些方法返回int
primitive,您当然可以将其转换为字符串值。
getYear
getMonthValue
(或getMonth
枚举Month
)getDayOfMonth
(以及getDayOfWeek
枚举DayOfWeek
)getHour
getMinute
getSecond
getNano
(一秒的一小部分)答案 2 :(得分:0)
您可以通过拆分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];
答案 3 :(得分:0)
首先使用split(" ")
基于空格分割字符串..它将为您提供长度为2的字符串数组。其中包含(2016-03-04)
和(16:32:33)
。然后分别使用split("-")
和split(":")
分割字符串againg。你会得到你的答案。请自行尝试代码,可能对您更好。
答案 4 :(得分:0)
试试这个..
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];
答案 5 :(得分:0)
我建议使用" [ - :]"
等模式正则表达式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]);
}
}
这将生成一个包含所需元素的数组
答案 6 :(得分:0)
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));