我有字符串格式:
2012.11.15 22:00:00 1.2971 1.2974 1.2959 1.296
我使用以下代码:
DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
String inputLine;
in.readLine();
while ((inputLine = in.readLine()) != null) {
StringTokenizer st = new StringTokenizer(inputLine);
Date date = df.parse( st.nextToken() );
double open = Double.parseDouble( st.nextToken() );
double high = Double.parseDouble( st.nextToken() );
double low = Double.parseDouble( st.nextToken() );
double close = Double.parseDouble( st.nextToken() );
...
但是SimpleDateFormate方法只获得用作分隔符的日期/时间之间的日期和空格 如何与时间在一起?
答案 0 :(得分:3)
更好地使用split()
中的String
方法,出于所有实际目的StringTokenizer
为deprecated,它仍然只是为了向后兼容。
尝试这样的事情:
String[] data = inputLine.split("\\s+");
现在,结果数组中的每个位置都将包含一段数据,您可以继续将其转换为适当的数据类型。特别是,对于日期(由实际日期加时间组成),请执行以下操作:
Date date = df.parse(data[0] + " " + data[1]);
上述优点是您可以忘记在tokenizer中获取下一个标记,并且从一开始就知道读取了多少元素(数组的长度)。
答案 1 :(得分:2)
使用:
Date date = df.parse( st.nextToken() + " " + st.nextToken() );
将两个“单词”传递给SimpleDateFormat对象。
答案 2 :(得分:1)
使用一个参数构造函数(要标记化的字符串)创建StringTokenizer
。此构造函数假定任何空格都是不同标记之间的分隔符。您的日期表示中间有空格。因此,StringTokenizer
会占用日期的一半,而另一个则为第二个令牌。
当您稍后使用空格来分隔其他字段时,直接的解决方案就是读取两个标记并重建组合字段:
Date date = df.parse( st.nextToken()+" "+ st.nextToken());