如何将日历日期转换为yyyy-MM-dd
格式。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);
Date inActiveDate = null;
try {
inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
这将产生inActiveDate = Wed Sep 26 00:00:00 IST 2012
。但我需要的是2012-09-26
。我的目的是使用Hibernate标准将此日期与我的数据库中的另一个日期进行比较。所以我需要yyyy-MM-dd
格式的日期对象。
答案 0 :(得分:313)
Java Date
是自1970年1月1日00:00:00 GMT以来的毫秒数的容器。
当您使用System.out.println(date)
之类的内容时,Java会使用Date.toString()
来打印内容。
更改它的唯一方法是覆盖Date
并提供您自己的Date.toString()
实现。在你启动你的IDE之前尝试这个,我不会;这只会使问题复杂化。最好将日期格式化为您要使用(或显示)的格式。
LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"
String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12
您应该使用ThreeTen Backport
以下是为历史目的而保留的(作为原始答案)
您可以做的是格式化日期。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"
System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"
这些实际上是相同的日期,用不同的方式表示。
答案 1 :(得分:18)
你的代码错了。无需解析日期并将其保留为Date对象。
您可以在要显示时格式化日历日期对象,并将其保留为字符串。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String inActiveDate = null;
try {
inActiveDate = format1.format(date);
System.out.println(inActiveDate );
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
答案 2 :(得分:13)
answer by MadProgrammer是正确的,尤其是关于Joda-Time的提示。现在,Joda-Time的继任者将Java 8作为新java.time package内置。这是Java 8中的示例代码。
使用日期时间(而非本地日期)时,time zone处于关键状态。日期取决于时区。例如,India time zone为+05:30
(比UTC早5个半小时),而France仅提前一个小时。所以在印度新的一天有一个约会,而在法国的同一时刻有“昨天”约会。创建缺少任何时区或偏移信息的字符串输出会产生歧义。您要求YYYY-MM-DD输出,所以我提供了,但我不推荐它。而不是ISO_LOCAL_DATE
我会使用ISO_DATE
来获取此输出:2014-02-25+05:30
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );
DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );
转储到控制台...
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );
跑步时......
zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25
使用Joda-Time库的类似代码,这是java.time的前身。
DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );
顺便说一下,输入字符串的格式是标准格式,是ISO 8601定义的几种方便日期时间字符串格式之一。
在解析和生成各种日期时间值的字符串表示时,Joda-Time和java.time默认使用ISO 8601格式。
答案 3 :(得分:6)
java.util.Date
对象无法以自定义格式表示 date ,而是使用返回SimpleDateFormat.format
的{{1}}方法
string
答案 4 :(得分:2)
为了解析java.util.Date
对象,您必须先使用自己的格式将其转换为String。
inActiveDate = format1.parse( format1.format(date) );
但我相信你在这里多余。
答案 5 :(得分:2)
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));
这将在JOption窗口窗格中以月,日和年格式显示您的日期+ 7天。
答案 6 :(得分:1)
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, date);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
}
答案 7 :(得分:0)
我发现这段代码的日期与一种格式进行比较,以便与数据库中的日期字段进行比较......这可能对您有所帮助......
使用simpledateformat将字符串转换为日期时,很难与mysql数据库中的Date字段进行比较。
因此,使用选择STR_to_DATE(' yourdate',%m /%d /%Y')转换java字符串日期 - >在这种格式中,您将获得mysql日期字段的确切日期格式。
http://javainfinite.com/java/java-convert-string-to-date-and-compare/
答案 8 :(得分:0)
public static String ThisWeekStartDate(WebDriver driver) {
Calendar c = Calendar.getInstance();
//ensure the method works within current month
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("Before Start Date " + c.getTime());
Date date = c.getTime();
SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");
String CurrentDate = dfDate.format(date);
System.out.println("Start Date " + CurrentDate);
return CurrentDate;
}
public static String ThisWeekEndDate(WebDriver driver) {
Calendar c = Calendar.getInstance();
//ensure the method works within current month
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
System.out.println("Before End Date " + c.getTime());
Date date = c.getTime();
SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");
String CurrentDate = dfDate.format(date);
System.out.println("End Date " + CurrentDate);
return CurrentDate;
}