我想创建一个没有TimeZone的Date对象(例如:2007-06-21
)。这可能吗?
当我使用以下方法时,它打印如Thu Jun 21 00:00:00 GMT 2007
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
TimeZone timeZone = TimeZone.getTimeZone("GMT");
timeZone.setDefault(timeZone);
sdf.setTimeZone(timeZone);
Date pickUpDate = sdf.parse("2007-06-21");
System.out.println(pickUpDate);
答案 0 :(得分:5)
如果您想格式化日期,则需要使用DateFormat
或类似内容。 Date
是只是的瞬间 - 自Unix纪元以来的毫秒数。它不知道时区,日历系统或格式。 toString()
方法始终使用系统本地时区,并始终以默认方式对其进行格式化。来自documentation:
将此Date对象转换为以下形式的字符串:
dow mon dd hh:mm:ss zzz yyyy
所以它的行为完全符合记录。
您已经拥有格式正确的DateFormat
,因此您只需要在其上调用format
:
System.out.println("pickUpDate" + sdf.format(pickUpDate));
当然,在你的样本中它没有多大意义,因为你只是解析它 - 但可能你通常会先将日期传递给它。
请注意,如果这是与数据库的交互,最好不要将其作为字符串传递。在尽可能多的时间内将值保留为“本机”表示,并使用PreparedStatement.setDate
之类的内容将其传递给数据库。
顺便说一句,如果您可以可能更改为使用Joda Time或Java 8(java.time.*
)中的新日期/时间API,那么您将更加顺畅与日期/时间相关的任何时间。 Date
/ Calendar
API确实非常糟糕。
答案 1 :(得分:1)
这是toString()
java.util.Date
public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
因此,如果您传递日期并尝试打印日期,则会一直打印出来。
答案 2 :(得分:1)
代码:
Date date = new Date();
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
日期:Fri Apr 29 04:53:16 GMT 2016
示例输出:2016-04-29
所需进口商品:
import java.util.Date; //for new Date()
import java.text.SimpleDateFormat; // for the format change
答案 3 :(得分:0)
System.out.println("pickUpDate " + sdf.format(pickUpDate));
您可以使用上面的代码将Date
格式化为String
答案 4 :(得分:0)
Date
不是约会对象。这是一个时间戳。那是一些令人印象深刻的API设计,不是吗?
您需要的类型现在是java.time.LocalDate,在Java 8中添加。
如果您不能使用Java 8,则可以使用ThreeTen,这是Java 7的后端。
答案 5 :(得分:0)
使用此代码:
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date pickUpDate =sdf.parse("2007-06-21");
System.out.println("pickUpDate "+sdf.format(pickUpDate));
希望它能帮到你。
答案 6 :(得分:0)
String your_format_date=sdf.format(pickUpDate);
System.out.println("pick Up Date " + your_format_date);