SimpleDateFormat不能正确处理DD

时间:2013-12-06 23:51:06

标签: java date simpledateformat

我想获得这样的格式:

2013-06-15-17-45

我在代码中执行以下操作:

  Date d = new Date();
  SimpleDateFormat ft = new SimpleDateFormat ("YYYY_MM_DD_HH_mm");          

  String fileName = "D:\\"+ft.format(d)+".csv";

但我没有让DD正确。它创建一个名称如下的文件:

D:\\2013_12_340_13_53.csv

2 个答案:

答案 0 :(得分:5)

资本“D”是一年中的一天;小写“d”是月中的某一天(SimpleDateFormat javadocs)。尝试:

SimpleDateFormat ft = new SimpleDateFormat ("yyyy_MM_dd_HH_mm");

此外,资本“Y”是“周年”;通常使用小写“y”(“年”)。

答案 1 :(得分:0)

answer by rgettman是正确的。

约达时间

这是相同类型的代码,但在Java 7中使用Joda-Time 2.3。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime now = new DateTime();

DateTimeFormatter formatter = DateTimeFormat.forPattern( "yyyy_MM_dd_HH_mm" );

System.out.println( "now ISO 8601 format: " + now.toString() );
System.out.println( "now in special format: " + formatter.print( now ) );

跑步时......

now ISO 8601 format: 2013-12-06T20:02:52.070-08:00
now in special format: 2013_12_06_20_02

建议:ISO 8601风格

我在标记文件和文件夹时执行相同类型的日期时间。我建议使用更接近标准ISO 8601格式的格式。

Joda-Time的内置格式接近我们需要的dateHourMinute()ISODateTimeFormat

要与文件系统一起使用,我们应该避免使用斜杠(Unix),反斜杠(MS Windows)和冒号(Mac)字符。从ISO格式开始,我们没有斜杠或反斜杠字符。只留下时间部分的冒号,通过调用Java中replaceAll类的String方法来删除。

您可能也希望替换T

// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime now = new DateTime();
System.out.println( "now: " + now );

DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinute();
String formatted = formatter.print( now ).replaceAll( ":", "." ).replaceAll( "T", "_" );
System.out.println( "formatted: " + formatted );

跑步时......

now: 2013-12-06T21:10:07.382-08:00
formatted: 2013-12-06_21.10

UTC

此外,对于服务器端或其他严肃的工作,请考虑转换为UTC而不是当地时间以避免歧义。

    DateTime now = new DateTime();
    System.out.println( "now: " + now );

    DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinute();
    String formatted = formatter.print( now.toDateTime( DateTimeZone.UTC ) ).replaceAll( ":", "." ).replaceAll( "T", "_" ) + "Z";
    System.out.println( "formatted: " + formatted );

跑步时......

now: 2013-12-06T21:21:00.128-08:00
formatted: 2013-12-07_05.21Z