Java中Date类的字符串格式

时间:2014-01-21 19:40:35

标签: java date format formatter string.format

我有这个程序打印所需的format数据。但是我很难让它发挥作用。

这是我的代码和输出:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class TestingStuff {

    public static void main(String[] args){
        Calendar calendar = Calendar.getInstance();
        calendar = new GregorianCalendar(2014, 07, 18);
        Date startDate = calendar.getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy");
        String formatted = simpleDateFormat.format(startDate);
        String result="";
        String header2=String.format("%s %20s %20s %20s%n", "Account","Date","Hours","Skill");
        result+=header2;
        result+="-----------------------------------------------------------------------\n";
        result+=String.format("summary %20s%n",formatted);
        result+=String.format("Totabl Billable: %25s%n", 40);
        result+=String.format("Total Non-Billable: %25s%n", 0);
        result+=String.format("Total Hours %25s%n", 40);
        System.out.println(result);

    }

}

输出:

Account                 Date                Hours                Skill
-----------------------------------------------------------------------
summary             08/18/14
Totabl Billable:                        40
Total Non-Billable:                         0
Total Hours                        40

预期产出:

    Account                 Date                Hours                Skill
    -----------------------------------------------------------------------
    summary                08/18/14
    Totabl Billable:                              40
    Total Non-Billable:                            0
    Total Hours                                   40

正如您所看到的那样,数字不是以标题标题为中心。我也很难编码spaces的数量,例如(%20s),我猜这不是正确的方法。有没有办法告诉你 用居中自动格式化?

2 个答案:

答案 0 :(得分:1)

        String header2=String.format("%s\t\t\t%s\t\t\t%s\t\t\t%s\n", "Account","Date","Hours","Skill");
        result+=header2;
        result+="-------------------------------------------------------------------------------\n";
        result+=String.format("summary \t\t%s\n",formatted);
        result+=String.format("Totabl Billable: \t\t\t\t%s\n", 40);
        result+=String.format("Total Non-Billable: \t\t\t\t%s\n", 0);
        result+=String.format("Total Hours \t\t\t\t\t%s\n", 40);
        System.out.println(result);

这应该可行。即使我输入不同的号码也为我工作。

答案 1 :(得分:1)

我建议使用java.util.Formatter' - '标记左对齐。来自Javadoc:

  

' - ''\ u002d'左对齐输出。空格('\ u0020')将根据需要添加到转换值的末尾,以填充字段的最小宽度。

因此,如果我们将此应用于您的示例:

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();
    calendar = new GregorianCalendar(2014, 07, 18);
    Date startDate = calendar.getTime();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy");
    String formatted = simpleDateFormat.format(startDate);
    String result = "";
    String header2 = String.format("%s %20s %20s %20s%n", "Account", "Date", "Hours", "Skill");
    result += header2;
    result += "-----------------------------------------------------------------------\n";
    result += String.format("summary %20s%n", formatted);
    result += String.format("%-40s %4d%n", "Totabl Billable:", 40);
    result += String.format("%-40s %4d%n", "Total Non-Billable:", 0);
    result += String.format("%-40s %4d%n", "Total Hours:", 40);
    System.out.println(result);
}

将第一个输入(行标签)填充空格以匹配固定宽度(在本例中为40)。这将产生:

Account                 Date                Hours                Skill
-----------------------------------------------------------------------
summary             08/18/14
Totabl Billable:                           40
Total Non-Billable:                         0
Total Hours                                40

这为动态行标签提供了额外的好处,因为无论标签的长度如何,它都会自动填充到指定的宽度。它会比为每个可能的标签计算空间更灵活。