3

我要做的是将日期传递到日历中,以便它将格式化日期以供另一个构造函数使用。这样我以后就可以使用日历提供的功能来使用它。

public class Top {
public static void main(String[] args) {
    Something st = new Something(getCalendar(20,10,2012));       
    System.out.println(st.toString());       
    }

public static Calendar getCalendar(int day, int month, int year){
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, day);
    return cal;
    }
}

tostring 方法。

public String toString(){
    String s = "nDate: " + DateD;
    return s;
}

日期:java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true

而不是日期:20/10/2012

4

5 回答 5

1

假设DateDCalendar,它是默认toString()实现。你需要打电话getTime()才能date摆脱它。

来自Calendar#toString()的 java 文档

返回此日历的字符串表示形式。此方法仅用于调试目的,返回字符串的格式可能因实现而异。返回的字符串可能为空但不能为空。

您可以使用SimpleDateFormat将其转换为String

于 2012-10-20T14:23:58.537 回答
1

首先,您不需要toString()在打印实例时显式使用方法。它将被自动调用。

此外,您应该使用SimpleDateFormat格式化您Date所需的字符串格式: -

Calendar cal = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String date = format.format(cal.getTime());

System.out.println(date);

输出: -

2012/10/20
于 2012-10-20T14:24:56.193 回答
1

如果要将日历实例表示的日期打印为字符串,则应使用SimpleDateFormatter将日期格式化为所需格式,如下所示:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");
System.out.println(sdf.format(DateD.getTime());
于 2012-10-20T14:24:59.917 回答
1

对我来说似乎工作太多了。

作为用户,我宁愿传递一个日期并明确合同。提供将 String 转换为 Date 的便捷方法:

public class Top {

    public static final DateFormat DEFAULT_FORMAT;

    static {
        DEFAULT_FORMAT = new SimpleDateFormat("yyyy-MMM-dd");
        DEFAULT_FORMAT.setLenient(false);
    }

    public static void main(String [] args) {
    }

    public static Date convert(String dateStr) throws ParseException {
        return DEFAULT_FORMAT.parse(dateStr);
    }     

    public static String convert(Date d) {
        return DEFAULT_FORMAT.format(d);
    }   
}
于 2012-10-20T14:26:45.050 回答
0

LocalDate

显然,您想要一个没有日期的仅日期值。为此,请使用LocalDate类而不是Calendar. Calendar课程是针对日期加上一天中的时间。此外,Calendar它现在是遗留的,在被证明是麻烦、混乱和有缺陷之后被 java.time 类所取代。

只需将所需的年、月和日传递给工厂方法。与Calendar.

LocalDate ld = LocalDate.of( 2012 , 10 , 20 );

或者,传递一个月的常数。

LocalDate ld = LocalDate.of( 2012 , Month.OCTOBER , 20 );

java.time 类倾向于使用静态工厂方法而不是带有new.

字符串

要生成标准 ISO 8601 格式的字符串,请调用toString

String output = ld.toString() ;

2012-10-20

对于其他格式,请在 Stack Overflow 中搜索DateTimeFormatter. 例如:

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
String output = ld.format( f );

20/10/2012

于 2016-12-04T23:38:10.950 回答