从java中的文本文件中读取时间

时间:2013-02-14 13:00:21

标签: java simpledateformat

我正在尝试在java中编写一些代码来读取文本文件,但是当它以(hh:mm)格式读取时间时,如下例所示:

6:30 14:30

并且有我的java代码将字符串转换为Data formate

DateFormat formatter = new SimpleDateFormat("hh:mm");
strLine = br.readLine();
strLine = strLine.trim();
tokens2 = strLine.split(" ");
System.out.println((Date)formatter.parse(tokens2[0]));

输出将是:

Thu Jan 01 06:30:00 AST 1970

它会在长格式日期中给出,而我只想采取时区(06:30)。 我该怎么办 ? 任何建议。

编辑:这段代码通过Joda时间解决了问题:

LocalTime.parse(tokens2[0]);

只需要时间

4 个答案:

答案 0 :(得分:5)

首先,您的时间模式是错误的 - 您应该使用HH:mm,因为您在示例中使用的是24小时制。

其次,您正在解析DateDate只是一个瞬间:它不知道时区,日历,你是否只对时间,日期等感兴趣。

第三,你看到的是输出,因为你基本上只是在调用Date.toString()

Java中没有类型只表示“一天中的某个时间”(顺便说一下,它与时区完全不同)。您可以格式化 Date只包含时间部分,但如果您想要这样做,我强烈建议您使用UTC时区避免任何可能的DST问题。

更好的解决方案是使用Joda Time类型的LocalTime - 适合您的情况。你可以解析它(DateTimeFormatter.parseLocalTime),然后适当地使用它,格式化它(再次只是一次)。

答案 1 :(得分:1)

我假设您要阅读并解析6:30并将其输出为06:30,对吧?

嗯,第一步是使用格式化程序,再次输出日期:

System.out.println(formatter.format((Date)formatter.parse(tokens2[0])));

顺便说一句,您的格式无法正确格式14:30,因为h表示上午/下午的小时,例如1-12。您的格式应为HH:mm,否则您将获得输出02:30而不是14:30

答案 2 :(得分:0)

您可以通过两种方式使用SimpledateFormatter

  1. 解析字符串并创建日期
  2. 创建日期的字符串aout
  3. 在你的例子中你想要两者。 首先,您要解析字符串并创建日期(即使您只是时间部分中的interestet)。在第二步中,您要在此日期之外创建一个字符串并将其打印到System.out。

    Date date=formatter.parse(tokens2[0]);     //use the 'formatter' to parse the String
    Sytem.out.println(formatter.format(date)); //use the 'formatter' to define the format of the output.
    

答案 3 :(得分:0)

使用java.time

其他答案是正确的但现在过时了。

java.time.LocalTime类表示没有日期且没有时区的时间。该类可以使用24小时制直接解析标准ISO 8601格式的字符串:HH:MM或HH:MM:SS

LocalTime lt = LocalTime.parse( "14:30" );
String output = lt.toString();  // 14:30

格式

如果您需要其他格式,请使用DateTimeFormatter。甚至自动本地化。

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL );
f = f.withLocale( Locale.CANADA_FRENCH ); // Cultural norms & human language
String output = lt.format( f );

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuarter等。