我做了一个我需要进行日期转换的应用程序。 这是我的代码。
GregorianCalendar c = new GregorianCalendar(Locale.GERMANY);
c.set(2011, 04, 29,0,0,0);
String cdate = (String) DateFormat.format("yyyy-MM-dd HH:mm:ss", c.getTime());
Log.i(tag,cdate);
现在,当我在这里检查我的LOG是输出:
04-22 12:44:15.956:INFO / GridCellAdapter(30248):2011-04-29 HH:00:00
为什么小时字段没有设置。我在制作日历对象时显式传递了0,仍然在LOG中显示HH。 可能是什么问题?
提前谢谢。
答案 0 :(得分:3)
使用小写hh:
String cdate = (String) DateFormat.format("yyyy-MM-dd hh:mm:ss", c.getTime());
答案 1 :(得分:1)
设置c.set(Calendar.HOUR_OF_DAY,0)
,它应该有效。
你试过这样的吗?
c.set(Calendar.YEAR, 2009);
c.set(Calendar.MONTH,11);
c.set(Calendar.DAY_OF_MONTH,4);
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0)
答案 2 :(得分:0)
LocalDate.of( 2011 , 4 , 29 ) // Represent April 29, 2011.
.atStartOfDay( ZoneId.of( "America/Montreal" ) ) // Determine the first moment of the day. Often 00:00:00 but not always.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String representing the value of this date, using standard ISO 8601 format.
.replace( "T" , " " ) // Replace the `T` in the middle of standard ISO 8601 format with a space for readability.
现代的方法是使用java.time类。
如果您想要获得当天的第一时刻,请不要假设时间00:00:00。某些时区的异常意味着这一天可能会在另一个时间点开始,例如01:00:00。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
您想在问题中找到特定日期。
LocalDate localDate = LocalDate.of( 2011 , 4 , 29 ) ;
再次应用时区以确定当天的第一时刻。
ZonedDateTime zdt = localDate.atStartOfDay( z ); // Determine the first moment of the day on this date for this zone.
我建议始终在日期时间字符串中包含时区指示符或与UTC的偏移量。但是如果你坚持,你可以在java.time中使用不包含区域/偏移的DateTimeFormatter
预定义DateTimeFormatter.ISO_LOCAL_DATE_TIME
。只需从中间删除T
。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?