针对拆分日期字符串提出了哪种方法?

时间:2012-12-30 08:11:08

标签: java string datetime

我有String个实例,格式如下:

yyyyMMddHHmmss

我希望将它的任何元素拆分为整数变量。样品:

String date_time = "20080519145436"; 

通过上面的字符串结果必须是:

int year  = 2008;
int month  = 05;
int day  = 19;
int hour  = 14;
int minutes  = 54;
int second  = 36;

我找到了解决这个问题的两种方法:

  1. 使用SimpleDateFormatter并获取元素。
  2. 使用subString()类的String方法。
  3. 我的问题是:提出哪种方式?还有其他方法吗?

5 个答案:

答案 0 :(得分:7)

使用JodaTime中的日期格式设置机制。

例如:

final DateTimeFormatter parser = DateTimeFormat.forPattern ( "yyyyMMddHHmmss" );
final DateTime date = parser.parseDateTime( "20080519145436" );
int year = date.getYear();
...

答案 1 :(得分:2)

你可以简单地使用SimpleDateFormat

String date_time = "20080519145436"; 
        SimpleDateFormat df =new SimpleDateFormat("yyyyMMddHHmmss");
        Date d= df.parse(date_time);
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        System.out.println(cal.get(Calendar.YEAR));

答案 2 :(得分:2)

甚至不要考虑使用String.subString()。日期不是String,您不应该尝试将其作为String处理,因为您的输入绝对没有完整性。您可以输入任何14位数字输入,您的算法会将其分成无意义的日期部分,例如month = 42。使用SimpleDateFormatter,JodaTime或任何其他专门针对日期对象的算法将在这种情况下抛出异常。

答案 3 :(得分:0)

另一种方式是

    long d = Long.parseLong("20080519145436");
    int year = (int) (d / 10000000000L);
    int month = (int) (d / 100000000L % 100);
    int day = (int) (d / 1000000L % 100);
    int hour = (int) (d / 10000L % 100);
    int minutes = (int) (d / 100L % 100);
    int second = (int) (d % 100);

至于选项,我认为#2更快

int year = Integer.parseInt(date_time.substring(0, 4)); 
...

因为已知SimpleDateFormat很慢。

答案 4 :(得分:0)

使用SimpleDateFormatter并获取元素。