如何在Java中将字符串时间戳转换为日历格式?

9

我有一个字符串是时间戳,想把它转换成日历对象,以便在我的Android应用程序中显示。

到目前为止,我的代码显示的所有内容都是在1970年代。

String timestamp = parameter.fieldParameterStringValue;
timestampLong = Long.parseLong(timestamp);
Date d = new Date(timestampLong);
Calendar c = Calendar.getInstance();
c.setTime(d);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);

dateTextView.setText(year + "-" + month + 1 + "-" + date);

更新: 只是提醒一下,服务器的时间戳是:1369148661, 这可能是错误的吗?


你从哪里获取时间戳的?我知道有些 API 会去掉千分位以节省空间,即只保留一秒的精度。 - Scary Wombat
你可以尝试执行 c.setTimeInMillis(timestampLong); 代码,看看是否会得到相同的结果? - Alexis C.
我也尝试过那个,但似乎不起作用。我很确定值是以秒为单位的。 - Joakim Engstrom
好的,再次测试,现在一切都正常了,除了月份显示的是41。 - Joakim Engstrom
好的,现在我意识到了我错在哪里。 - Joakim Engstrom
显示剩余7条评论
2个回答

28

你可以使用setTimeMillis:

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestampLong);

22

如果你得到的时间单位是秒,就必须将其乘以1000:

String time = "1369148661";
long timestampLong = Long.parseLong(time)*1000;
Date d = new Date(timestampLong);
Calendar c = Calendar.getInstance();
c.setTime(d);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
System.out.println(year +"-"+month+"-"+date);

输出:

2013年4月21日

注意,Calendar.MONTH 的常量从0开始。因此,您应该像这样为用户显示它:

System.out.println(year +"-"+(month+1)+"-"+date);

最终我跳过了日期转换,但除此之外,我使用的代码是相同的。特别是(month +1)在一开始让我感到困惑。 - Joakim Engstrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接