繁体   English   中英

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

[英]How to use java.util.Calendar in GWT

我必须在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中没有等效的东西。 但是有一个可接受的功能请求 也许您会在请求的评论中找到一些提示。

下面显示了如何使用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);
}

对于那些喜欢直接实现数学的人来说,这里是一个解决方案,用于在不使用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可以轻松找到一天,一年等数量的常数,例如毫秒数。 棘手的部分是增加几个月,因为一个月内的毫秒数将取决于月份。 如果有任何需求,我很乐意写一个函数并在此处发布,以便添加和减去月份。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM