将秒转换为日期时间字符串

时间:2011-03-09 12:25:52

标签: android

我从纪元时间开始有几秒钟,并希望将其转换为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

5 个答案:

答案 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);