我从纪元时间开始有几秒钟,并希望将其转换为Day-Month-Year HH:MM
我试过跟随,但它给了我错误的价值。
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(seconds*1000);
String dateString = calendar.get(Calendar.DAY_OF_WEEK) + ", "+.......
上面的代码工作不正常我在这里做错了什么。
例如seconds = 1299671538
然后它生成时间字符串Friday, December 12, 1969
,这应该显示Wednesday, March 09, 2011
答案 0 :(得分:15)
例如,如果秒= 1299671538,那么它会生成时间字符串,如1969年12月12日星期五,这应该显示在2011年3月9日星期三
你有整数溢出。只需使用以下内容(在1000常量后注意“L”):
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(seconds*1000L);
String dateString = calendar.get(Calendar.DAY_OF_WEEK) + ", "+.......
或更好地使用SimpleDateFormat类:
SimpleDateFormat formatter = new SimpleDateFormat("EEEE, MMMM d, yyyy HH:mm");
String dateString = formatter.format(new Date(seconds * 1000L));
这将为您提供原始秒输入的以下日期字符串:
Wednesday, March 9, 2011 13:52
答案 1 :(得分:4)
您需要使用
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
而不是
Calendar cal = Calendar.getInstance();
因为从秒开始的UTC时间取决于时区。
答案 2 :(得分:2)
在这种情况下,您不需要日历,只需使用构造函数new Date(1000 * seconds)
然后使用SimpleDateFormat创建一个String来显示它。
有关使用SimpleDateFormat的完整说明,请转到here。
这个问题的答案是你需要使用长值而不是整数。
new Date(1299674566000l)
如果你不相信我,请运行:
int secondsInt = 1299674566;
System.out.println(new Date(secondsInt *1000));
long secondsLong = 1299674566;
System.out.println(new Date(secondsLong *1000));
答案 3 :(得分:1)
我可以确认@Idolon的答案工作正常,简单的片段在下面......
long created = 1300563523;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US);
String dateString = formatter.format(new Date(created * 1000L));
使用SimpleDateFormat是更好的方法,根据需要更改格式。
答案 4 :(得分:0)
没有日历会不会有效,如下所示?没有运行这段代码,但猜猜它应该有效。
CharSequence theDate = DateFormat.format("Day-Month-Year HH:MM", objDate);