在我的网络应用程序中,将用户的某些活动的时间作为时间戳存储在数据库中(在数据库中)被显示回用户需要转换为正常的日期/时间格式.
(实际上,我的数据库Cassandra存储一个列被写入时间戳的长度值(自1970年以来的微秒),我将用它来查找相应的用户活动的时间)
我正在使用JSF 2.0(键盘),我相信有转换器可能有助于这种转换?否则如何才能最大限度地实现这些转化?
解决方法
让我为你提出这个解决方案.所以在你的托管bean中,这样做
public String convertTime(long time){ Date date = new Date(time); Format format = new SimpleDateFormat("yyyy MM dd HH:mm:ss"); return format.format(date); }
所以在你的JSF页面中,你可以这样做(假设foo是包含你的时间的对象)
<h:dataTable value="#{myBean.convertTime(myBean.foo.time)}" />
如果您有多个页面要使用此方法,可以将其放在抽象类中,并让您的托管bean扩展此抽象类.
编辑:使用TimeZone返回时间
不幸的是,我认为SimpleDateFormat将始终格式化本地时间,所以我们可以使用SimpleDateFormat了.所以要在不同的时区显示时间,我们可以做到这一点
public String convertTimeWithTimeZome(long time){ Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("UTC")); cal.setTimeInMillis(time); return (cal.get(Calendar.YEAR) + " " + (cal.get(Calendar.MONTH) + 1) + " " + cal.get(Calendar.DAY_OF_MONTH) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE)); }
更好的解决方案是利用JodaTime.在我看来,这个API比Calendar更好(更轻,更快,提供更多的功能).加上Calendar.Month在1月是0,强制开发者添加1的结果,你必须自己格式化时间.使用JodaTime,您可以修复所有这些.纠正我,如果我错了,但我认为JodaTime被并入JDK7