我希望这个日期能够在GMT" 01/01/02和#34;
中显示期待结果 - " Fri Jan 01 00:00:00 GMT 2100"
我看到的结果 - " 12月31日星期四19:00 00:00美国东部时间2099"
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
try{
Date myDate = sdf.parse("01/01/2100");
System.out.println(myDate);
}
catch(Exception e){
}
我希望结果myDate在GMT时间不是EST
示例2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("gmt"));
try{
Date myDate = sdf.parse("2010-05-23 09:01:02");
SimpleDateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
System.out.println("MYDATE: " +df.format(myDate));
}
catch(Exception e){
}
输出:Sun,2010年5月23日,05:01
期待:Sun,2010年5月23日,09:01
http://goo.gl/uIy9RQ - 我的项目代码的URL,运行并检查结果
答案 0 :(得分:1)
正如评论中所述,您必须将日期格式应用于Date
。我修改了您的代码以显示myDate
try{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Date myDate = sdf.parse("01/01/2100");
System.out.println(sdf.format(myDate));
sdf.setTimeZone(TimeZone.getTimeZone("EST"));
System.out.println(sdf.format(myDate));
}
catch(Exception e){
// error handling
}
输出
01/01/2100
31/12/2099
但是不要忘记日期仍然包含有关小时,分钟,秒等的信息。关于应用日期格式化程序,此信息在运行时不会显示
System.out.println(sdf.format(myDate));
如果您需要设置日期的某些字段,则应使用Calendar。
答案 1 :(得分:0)
要自定义日期格式,请使用以下
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());
日期格式参数可以是以下任何一种
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
答案 2 :(得分:0)
toString
是误导性的正如之前在Stack Overflow上多次提到的那样,java.util.Date的toString
方法在生成日期时间值的文本表示时静默应用JVM的当前默认时区。一个不幸的设计选择。
旧的java.util.Date/.Calendar类非常麻烦。避免他们。在Java 8及更高版本中,使用内置的java.time框架。由JSR 310定义,由ThreeTen-Extra项目扩展。请参阅Tutorial。
基本上UTC在这种情况下与GMT相同。
java.time框架包含类LocalDate
,用于仅限日期的值,没有时间或时区。
请注意,即使内部没有存储时区,获取当前日期也需要时区。对于任何特定时刻,日期在世界各地按时区变化,在东部早些时候开始新的一天。
使用proper time zone name。切勿使用EST
之类的3-4个字母代码,因为它们既不标准也不唯一。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
LocalDate::toString
方法以标准ISO 8601格式生成字符串:2016-01-23。
如果您无法使用Java 8技术,请添加非常成功的Joda-Time库。 Joda-Time启发了java.time。
在这种情况下,代码与上面的代码类似。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
LocalDate localDate = new LocalDate( zone );