如何在GWT中使用java.util.Calendar

我必须在GWT入口点使用java.util.Calendar,但是我在运行应用程序时遇到错误,那是因为GWT无法找到源代码,无论如何我可以解决这个问题。

提前致谢!!!

java.util.Calendar不是模拟类。 您可以在此处找到模拟类的列表:

http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

我强烈建议不要在客户端使用任何日期/日历库。 你可能只会遇到麻烦。 实际上,即使在GWT中模拟java.sql.Date和java.util.Date,我也不会使用它们。 如果您希望使用日历,那么您可能希望在客户端上支持时区。 使用模拟的Date类,您将以某种方式将客户端的Date从浏览器的时区转换为某个目标时区(GMT或用户偏好中用户定义的任何内容?)。 这肯定会容易出错。 使用GWT的TimeZone会增加其他问题。 例如,如何在Java TimeZones和GWT TimeZones之间进行映射?

我建议在服务器上进行所有日期操作和格式化。 在客户端,您只需使用日期/月/年三元组。 服务器可以在用户(或组织)与java.util.TimeZone(或joda timezone)之间建立关联。 使用三元组和时区,您可以轻松地及时创建特定实例。

您可以使用com.google.gwt.user.datepicker.client.CalendarUtil

没有办法在GWT中使用java.util.Calendar ,因为JavaScript中没有等效项。 但是有一个可接受的function请求 。 也许你会在请求的评论中找到一些提示。

下面显示了如何使用Joda Time从Java Date类型中使用Joda Times format()函数提取任何日期信息,并使用它来使用Joda Time的parse()函数构建new Date()

 static DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS"); static DateTimeFormat datefmt = DateTimeFormat.getFormat("yyyy-MM-dd "); static DateTimeFormat timefmt = DateTimeFormat.getFormat("HH:mm:ss.SSS"); public Date getDateTime(Date date, Date time) { String datetime = datefmt.format(date) + timefmt.format(time); return dtf.parse(datetime); } 

您是否尝试将类的实际代码添加到项目中? 一些Java SDK类编译得很好,即使它们不在JRE白名单中。

对于那些喜欢直接实现数学的人来说,这里是一个解决方案,用于在不使用Calendar或任何已弃用的函数的情况下将天数添加到现有日期对象:

 private Date addDays(Date dateIn, int numDays) { long milisPerDay = 86400000; // convert the dateIn to milliseconds long dateInMilis = dateIn.getTime(); // add numDays to the date dateInMilis = dateInMilis + (numDays * milisPerDay); return new Date(dateInMilis); } 

以下是如何将当前年份作为字符串(对于版权声明非常有用)

 long time = System.currentTimeMillis(); long milisPerYear = new BigInteger("31536000000").longValue(); String currentYear = String.valueOf((int) Math.floor(time / milisPerYear) + 1970); 

谷歌可以很容易地找到一天,一年等的常数,例如毫秒数。 棘手的部分是增加几个月,因为一个月内的毫秒数将取决于月份。 如果有任何需求,我很乐意写一个函数并在此处发布,以便添加和减去月份。