Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改EclipseTostring代码生成器以显示不太详细的日历对象_Java_Eclipse - Fatal编程技术网

Java 如何更改EclipseTostring代码生成器以显示不太详细的日历对象

Java 如何更改EclipseTostring代码生成器以显示不太详细的日历对象,java,eclipse,Java,Eclipse,EclipseTostring源代码生成器非常有用,除非对象包含日历对象。有没有办法更改Eclipse toString生成器以更清晰地显示日历对象? 是否可能使用公共SimpleDataFormat? 还是一个值得信赖的插件 所需日历字符串yyyy MM dd HH:MM:ss: 2011-08-22 13:29:26 Eclipse日历示例:这非常荒谬: java.util.GregorianCalendar[time=1314034166984,areFieldsSet=true,are

EclipseTostring源代码生成器非常有用,除非对象包含日历对象。有没有办法更改Eclipse toString生成器以更清晰地显示日历对象? 是否可能使用公共SimpleDataFormat? 还是一个值得信赖的插件

所需日历字符串yyyy MM dd HH:MM:ss:

2011-08-22 13:29:26
Eclipse日历示例:这非常荒谬:

java.util.GregorianCalendar[time=1314034166984,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=4,DAY_OF_MONTH=22,DAY_OF_YEAR=234,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=29,SECOND=26,MILLISECOND=984,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]
愤怒的计算机使我找到了一个解决办法。下面是一个快速而肮脏的自定义toString实现:

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

public class MyToStringBuilder {
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    private String str;
    private boolean isFirst;

    public MyToStringBuilder(Object o) {
        isFirst = true;
        str = "";
        str += o.getClass().getSimpleName() + " [";
    }

    public MyToStringBuilder appendItem(String variableName, Object value) {
        if(value != null){
            this.addItem(variableName, value.toString());
        } else {
            this.addItem(variableName, "null");
        }
        return this;
    }

    public MyToStringBuilder appendItem(String variableName, Calendar value) {
        if(value != null){
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
            this.addItem(variableName, sdf.format(value.getTime()));
        } else {
            this.addItem(variableName, "null");
        }
        return this;
    }

    private void addItem(String variableName, String value) {
        if(!isFirst){
            str += ", ";
        }
        isFirst = false;
        str += variableName + "=";
        str += value;
    }

    @Override
    public String toString() {
        str += "]";
        return str;
    }

}

谢谢

Eclipse只使用gregoriacalendar.toString方法。改变这一点的唯一方法是在您自己的对象中扩展GregorianCalendar类,并实现自定义toString方法

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

public class MyGregorianCalendar extends GregorianCalendar
{
    public MyGregorianCalendar() {
        super();
    }

    SimpleDateFormat sdf = new SimpleDateFormat("H:MM:d kk:m:s");
    public String toString() {
        return sdf.format(getTime());
    }
}

toString的目的是提供对象状态的字符串表示。这对于调试和日志记录非常有用

除了定义良好的对象格式的最简单情况外,不应将其用作UI类型标签。toString没有保证结果或格式一致的合同。如果您希望从对象中获得特定类型的输出以供用户显示,请编写一个专门用于此目的的方法。不要使用toString


在OP的具体案例中,有十几种不同的方式来表示日期。这就是为什么有日期格式化类来显示一致的输出。

以下内容有效地覆盖了任何类的toString方法,就像只使用Eclipse调试器看到的那样,但我发现它在调试时解码日历对象时非常有用

使用以下步骤添加调试详细信息格式化程序:

从菜单中选择Windows->Preferences 在首选项中打开Java->Debug并单击详细信息格式化程序 您可以在这里添加所需的格式化程序 例如,对于日历对象:

单击添加。。 在限定类型名称字段中输入java.util.Calendar 输入以下内容:

java.text.simpleDataFormat sdf=new java.text.simpleDataFormattee,d MMM yyy HH:mm:ss Z; sdf.formatthis.getTime

确保选中“启用此详细信息格式化程序”

单击“确定”。
来源:

在eclipse中生成toString方法时,对话框有一个代码样式选项。该列表中有自定义的toString Builder,您可以定义自己要使用的String Builder类型类

在Custom toString builder下,它的文档记录得很差

告诉全世界决定一个更有意义的时间标准世界:决定一个更有意义的时间标准!感谢您的输入-我不想更改底层数据模型,这样toString就可以工作了。这也会给javax.persistence.com带来一些额外的麻烦。同意这很难看,但如果它对您很重要的话,这就是解决问题的方法。我当然不想将其用于客户端,但我确实希望它用于日志记录和调试,而Calendar.toString为此目的过于冗长,因此违反了Oracle的toString:结果应该是一个简洁但信息丰富的表示,便于一个人阅读。。我正在Eclipse中寻找一个工具,或者作为一个插件来创建具有“简明但信息丰富”日历类输出的toString方法;这是否也会改变toString生成器的工作方式?很好。这只会改变toString在Eclipse调试器中的工作方式。这非常有用!调试日历总是一个问题。这是一个很好的答案。谢谢你忘了考虑时区了。在步骤3中,应使用:java.text.simpleDataFormat sdf=new java.text.simpleDataFormatee,d MMM yyy HH:mm:ss Z;sdf.setTimeZonethis.getTimeZone;sdf.formatthis.getTime;