我有一个String变量作为日期类型。例如:
String myDate= "20130403";
我想把它分成3种不同的日期格式:
String myDay = "03";
String myMonth= "04";
String myYear= "2013";
分离我的String的最快方法是什么?
感谢
答案 0 :(得分:6)
String yourDateString = "20130403";
SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
Date currentDate = sd.parse(yourDateString);
Calendar cal = Calendar.getInstance();
cal.setTime(currentDate);
String year = String.valueOf(cal.get(Calendar.YEAR)) + "";
// As Gyro said month start at 0 to 11.
String month = String.valueOf(cal.get(Calendar.MONTH)+1) + "";
String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)) + "";
答案 1 :(得分:4)
如果这是固定格式,只需使用substring。
String myDate= "20130403";
String myYear = myDate.substring(0,4);
String myMonth= myDate.substring(4,6);
String myDay= myDate.substring(6,8);
System.out.println(myDay);
System.out.println(myMonth);
System.out.println(myYear);
答案 2 :(得分:3)
如果您确定您的日期符合yyyyMMdd
这样的格式,那么您可以使用subString
功能
String myDate = "20120221"
String year = myDate.subString(0,4);
String month = myDate.subString(4,6);
String day = myDate.subString(6);
答案 3 :(得分:3)
您可以使用SimpleDateFormat将String解析为日期,并使用Calendar获取所需的所有字段。
String myDate= "20130403";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try {
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(myDate));
String myDay = (String)cal.get(Calendar.DATE);
String myMonth = (String)(cal.get(Calendar.MONTH)+1);
String myYear = (String)cal.get(Calendar.YEAR);
} catch (ParseException e) {
e.printStackTrace();
}
答案 4 :(得分:2)
如果您的数据字符串格式不会改变,您可以使用子字符串:
String myDate= "20130403";
String myDay = myDate.substring(6,8);
String myMonth = myDate.substring(4,6);
String myYear = myDate.substring(0,4);
答案 5 :(得分:2)
我认为您希望使用特殊的java simple date format。
答案 6 :(得分:2)
如果字符串具有固定长度(例如,年份总是4位,月份总是2,等等),则可以使用substring()方法。
在你的情况下:
String myDate = "20130403";
String myYear = myDate.substring(0,4);
String myMonth = myDate.substring(4,6);
String myDay = myDate.substring(6,8);
如果字符串不是固定长度,您可以尝试使用分隔符,例如“ - ”。所以你的字符串看起来像这个“2013-04-03”然后只需使用String.split();功能
示例:
String myDate = "2013-04-03";
String[] myDateElements = myDate.split("-");
String myYear = myDateElements[0];
String myMonth = myDateElements[1];
String myDay = myDateElements[2];
答案 7 :(得分:2)
你试试子串吗?像这样(我认为也是最快的方式):
@Test
final public void testStringDateOperation() {
final String myDate= "20130403";
final String year = myDate.substring(0, 4);
final String month = myDate.substring(4, 6);
final String day = myDate.substring(6, 8);
Logger.trace("year: {0} - month: {1} - day: {2}", year, month, day);
}
答案 8 :(得分:0)
substring可能会执行任务,但不是最快的方法。 Substring为所有令牌创建新的字符串对象,因此不是性能效率或最快的方式。下面是来自java src的subString()的源代码。
public String More ...substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > count) {
throw new StringIndexOutOfBoundsException(endIndex);
}
if (beginIndex > endIndex) {
throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
}
return ((beginIndex == 0) && (endIndex == count)) ? this :
**new String(offset + beginIndex, endIndex - beginIndex, value);**
}
所以,最好的方法是,根据我使用regEx进行拆分。
问候 Punith