我创建了一个类 CurrentDate 它以特定格式显示系统日期(例如2012 年 6 月 29 日)。该类看起来像:

package getset;

import java.util.*;
import getset.Getset;
public class CurrentDate{
    public static void main(String[] args){
        Calendar cal = new GregorianCalendar();
        int month = cal.get(Calendar.MONTH);
        int year = cal.get(Calendar.YEAR);
        int day = cal.get(Calendar.DAY_OF_MONTH);

        String toyear=String.valueOf(year);
        String newyear=toyear.substring(2,4);
        String newmonth=monthvalidation(month);
        System.out.println("Current date : " + day + "-" + (newmonth) + "-" + newyear);
    }

    private static String monthvalidation(int initmonth) {
        // TODO Auto-generated method stub
        //int initmonth=i;
        String finalmonth="";
        if(initmonth==1)
        {
            finalmonth="JAN";
        }
        if(initmonth==2)
        {
            finalmonth="FEB";
        }
        if(initmonth==3)
        {
            finalmonth="MAR";
        }
        if(initmonth==4)
        {
            finalmonth="APR";
        }
        if(initmonth==5)
        {
            finalmonth="MAY";
        }
        if(initmonth==6)
        {
            finalmonth="JUN";
        }
        if(initmonth==7)
        {
            finalmonth="JUL";
        }
        if(initmonth==8)
        {
            finalmonth="AUG";
        }
        if(initmonth==9)
        {
            finalmonth="SEP";
        }
        if(initmonth==10)
        {
            finalmonth="OCT";
        }
        if(initmonth==11)
        {
            finalmonth="NOV";
        }
        if(initmonth==12)
        {
            finalmonth="DEC";
        }    
        return finalmonth;
    }
}

现在当我尝试使用它进行转换时 toString() 它没有显示预期的内容。我试过:

CurrentDate date=new CurrentDate();
String sysdate=date.toString();
System.out.println(""+sysdate);

它显示如下: getset.CurrentDate@18a178a 这不是人类可读的预期格式。我可以做什么来纠正这个问题?

有帮助吗?

解决方案

您需要覆盖 toString 方法。

在你的 CurrentDate 类,添加类似的东西

@Override
public String toString() {
    String toyear=String.valueOf(year);
    String newyear=toyear.substring(2,4);
    String newmonth=monthvalidation(month);
    return day + "-" + newmonth + "-" + newyear;
}

其他提示

你没有覆盖 Object 实施 toString()为了测试你的方法,你可以快速将你已经开发的逻辑放入 public String toString() 方法。然后在你的 main 方法,创建一个 CurrentDate 并打印 toString.

覆盖 toString 你的类中的方法。添加一个类似 a 的方法,如下所示。

@Override
public String toString() {

    return day + "-" + newmonth + "-" + newyear;
}

我看到你的代码有问题。首先,您没有想要的字段 toString() 表示。我认为你需要声明如下字段:

int month;
int year ;
int day;
 @Override
public String toString() {
    return "CurrentDate [month=" + month + ", year=" + year + ", day="
            + day + "]";
}

如果您使用的是 Eclipse IDE,只需生成 toString() 方法,这将是解决您问题的简单方法。现在,反对 toString() 为您调用 toString(). 。事实上,根据乔什·布洛赫的说法,

每个类都应该重写 toString() 以获取人类可读的格式。

CurrentDate date=new CurrentDate();
String sysdate=date.toString();
System.out.println(""+sysdate);

In your above code you are using date object but not assigning  any value , only CurrentDate  class reference. so your are getting 'getset.CurrentDate@18a178a' when use toString() method.

If you want to format date to string you have to use 

public static final String DATE_FORMAT_NOW = "dd-MMM-yy";

SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top