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

时间:2011-08-10 10:53:33

标签: java gwt calendar

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

提前致谢!!!

6 个答案:

答案 0 :(得分:19)

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)之间建立关联。使用三元组和时区,您可以轻松地及时创建特定实例。

答案 1 :(得分:16)

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

答案 2 :(得分:5)

没有办法在GWT中使用java.util.Calendar,因为JavaScript中没有等价物。但它有一个被接受的feature request。也许你会在请求的评论中找到一些提示。

答案 3 :(得分:3)

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

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);
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

对于那些喜欢直接实现数学的人来说,这里是一个解决方案,用于在不使用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);

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