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
格式的日期对象。#1 楼
JavaDate
是自1970年1月1日格林威治标准时间00:00:00以来的毫秒数的容器。当您使用
System.out.println(date)
之类的东西时,Java使用Date.toString()
来打印内容。 > Date并提供自己的
Date.toString()
实现。现在,在启动IDE并尝试执行此操作之前,我不会这样做。它只会使事情复杂化。最好将日期格式化为要使用(或显示)的格式。Java 8+
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
Java之前的格式8
您应该使用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"
这些实际上是相同的日期,但表示方式不同。
评论
有点,但是使用日历要容易得多
– MadProgrammer
2012年9月25日下午4:50
无论如何要从此日历对象中完全删除时区?
–Sarika.S
2012年9月25日下午5:24
如果您真的对日期/时间操作很认真,请看一下Joda Time,然后轻松搞定Calendar会容易得多。
– MadProgrammer
2012年9月25日在5:30
@ n13如果问题是关于数据库日期操纵甚至是时间操纵,我可能会同意你的看法。问题是如何用特定的日期格式表示日期值
– MadProgrammer
13年5月5日,3:12
结构合理的答案-这基本上是Model(Date)-View(Format)分离。
–溜溜球
16年1月1日在21:44
#2 楼
您的代码是错误的。没有时间解析日期,并将其保留为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();
}
#3 楼
java.timeMadProgrammer的回答是正确的,尤其是有关Joda-Time的提示。现在,Joda-Time的后继者已作为新的java.time软件包内置在Java 8中。这是Java 8中的示例代码。
使用日期时间(而不是本地日期)时,时区非常重要。每月的日期取决于时区。例如,印度时区为
+05:30
(比UTC提前五个半小时),而法国仅时一小时。因此,在印度新的一天中有一个日期,而在法国的同一天中有“昨天”日期。创建缺少任何时区或偏移量信息的字符串输出会造成歧义。您要求提供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
使用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
顺便说一句,您的输入字符串是一种标准格式,是ISO 8601定义的几种方便的日期时间字符串格式之一。
在解析和生成字符串表示形式时,Joda-Time和java.time都默认使用ISO 8601格式。各种日期时间值。
#4 楼
java.util.Date
对象不能以自定义格式表示日期,而是必须使用返回SimpleDateFormat.format
的string
方法。String myString=format1.format(date);
#5 楼
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);
}
评论
欢迎来到SO。请添加一些上下文/解释,因为仅代码答案不符合我们的标准。请参阅stackoverflow.com/help/how-to-answer
– Uwe Allner
17年9月26日在11:15
#6 楼
为了解析java.util.Date
对象,您必须先使用自己的格式将其转换为String。inActiveDate = format1.parse( format1.format(date) );
但是我相信您在这里是多余的。
#7 楼
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天。
#8 楼
我发现这段代码将日期与数据库中的日期字段进行比较的格式...也许对您有帮助...当您使用simpledateformat将字符串转换为日期时,很难与mysql数据库中的Date字段进行比较。
因此,请使用select STR_to_DATE('yourdate','%m /%d /%Y')-将Java字符串日期转换为格式- ->以这种格式,然后您将获得mysql日期字段的确切日期格式。
http://javainfinite.com/java/java-convert-string-to-date-and-compare /
评论
由于链接腐烂和其他问题,在StackOverflow上不建议仅链接的答案。您能否概述要点的信息?
–罗勒·布尔克
15年8月19日在19:26
#9 楼
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;
}
评论
您的代码令人困惑。您是要格式化日期格式为yyyy-MM-dd还是将字符串从yyyy-MM-dd解析为日期值?要格式化日期,只需使用format1.format(date),然后使用format1.parse(someStringValueInTheCorrectFormat)对其进行解析我已经编辑了我的问题。很抱歉先前的错误。
一个衬里:(new SimpleDateFormat(“ yyyy-MM-dd'T'HH:mm:ss.SSSXXX”)).format(Calendar.getInstance()。getTime());
想要的当前日期和时间的可能副本,格式为“ dd / MM / yyyy HH:mm:ss.SS”
@IwanAucamp:您在每次调用时都创建一个新实例-这很浪费,因为格式化程序可以是一个常量,并且只能创建一次(鉴于SDF不是线程安全的,因此您不需要线程安全)。 />