GVKun编程网logo

如何在GWT中使用java.util.Calendar(gwt java)

11

本文将分享如何在GWT中使用java.util.Calendar的详细内容,并且还将对gwtjava进行详尽解释,此外,我们还将为大家带来关于2月来自java.util.Calendar的奇怪行为、A

本文将分享如何在GWT中使用java.util.Calendar的详细内容,并且还将对gwt java进行详尽解释,此外,我们还将为大家带来关于2月来自java.util.Calendar的奇怪行为、Android java.util.Calendar-时差、calendar java_java中Calendar类的使用讲解、CalendarExtender使用Java更改日期的相关知识,希望对你有所帮助。

本文目录一览:

如何在GWT中使用java.util.Calendar(gwt java)

如何在GWT中使用java.util.Calendar(gwt java)

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

提前致谢!!!

答案1

小编典典

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

2月来自java.util.Calendar的奇怪行为

2月来自java.util.Calendar的奇怪行为

我遇到了来自java.util.Calendar的奇怪行为:

import static org.junit.Assert.*;import org.junit.Test;import java.util.Calendar;public class Tester1 {    @Test    public void test_monthOfDate() {        assertEquals(1, monthOfDate(2013, 1, 30)); // OK        assertEquals(1, monthOfDate(2013, 1, 31)); // OK        // Start of February        assertEquals(2, monthOfDate(2013, 2, 1));  // FAIL        assertEquals(2, monthOfDate(2013, 2, 28)); // FAIL        // to the end of it        // and after that it is okay also        assertEquals(3, monthOfDate(2013, 3, 1));  // OK    }    public int monthOfDate(int year, int month, int day) {        Calendar cal = Calendar.getInstance();        cal.set(Calendar.YEAR, year);        cal.set(Calendar.MONTH, month - 1);        // just a simple get! but seems it is very important        cal.get(Calendar.MONTH);        //        cal.set(Calendar.DAY_OF_MONTH, day);        return cal.get(Calendar.MONTH) + 1;    }}

我想知道为什么会这样吗?

答案1

小编典典

问题是您要从2013年1月30日开始使用日历。

然后,您将年份设置为2013年-这不是问题。

然后,您将月份设置为1(即2月)。您希望在这里发生什么?实际发生的情况是,它会记住需要将月份设置为1,而 不是
重新计算实际时间值。根据文档(Emphsis我的),

在您调用to时重新计算时间值:get

set(f,value)将日历字段f更改为value。另外,它设置一个内部成员变量以指示日历字段f已更改。尽管日历字段f立即更改,但是直到下一次调用get(),getTime(),getTimeInMillis(),add()或roll()时,才重新计算日历的时间值(以毫秒为单位)。因此,对set()的多次调用不会触发多个不必要的计算。作为使用set()更改日历字段的结果,其他日历字段也可能会更改,具体取决于日历字段,日历字段值和日历系统。
此外,在重新计算日历字段之后,get(f)不一定会返回通过调用set方法设置的值。 具体情况由具体的日历类确定。

当您尝试将“ 1月30日”更改为“ 2月30日”并强制进行计算时, 实际 发生的情况是您将在3月2日结束我的工作,但是在实现上可能会有所不同。

最好的解决方法是:

  • 使用Calendar.set(year, month, date)代替来避免此订购问题
  • 首先,将Joda Time用作更明智的API。

Android java.util.Calendar-时差

Android java.util.Calendar-时差

我想制作日历视图以支持触摸交互.
因此,我想构建新的自定义日历视图.
我试图使视图偏移量和实际日期值之间的映射功能.

这是我的主意:
如果我可以计算出自基准日期以来的周数(以我的情况为1989-12-31),
很容易知道偏移量. HEIGHT_FOR_WEEK * NUM_OF_WEEK是非常简单的计算
知道确切的偏移量.

我的问题是这样的:
首先,我从基准日期获得了毫秒值.我将毫秒设置为
另一个日历对象.我希望与该对象有相同的日期.但实际上
是不同的日期.

mBaseDateInMillis = mBaseDate.getTimeInMillis();
mAnotherDate.setTimeInMillis(mBaseDateInMillis);
/* I expect mBaseDate == mAnotherDate.
 * but it was different.
 */ 

这是我的代码:

public class CalendarCoordinate {
    public static final long ONEWEEK_IN_MILLISECONDS = 60 * 60 * 24 * 7 * 1000;
    public Calendar mBaseDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
    public long mBaseDateInMillis = 0;
    public Calendar mDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
    public int  mWeekHeight = 30;

    /**
     * CTOR
     */
    public CalendarCoordinate() {
        /* Base date is 1989-12-31 0, 0, 0
         * It was Sunday and offset 0 will be mapped onto this day.
         */
        mBaseDate.set(Calendar.MILLISECOND, 0);
        mBaseDate.set(1989, 12, 31, 0, 0, 0);
        mBaseDateInMillis = mBaseDate.getTimeInMillis();
        Log.v(TAG, "BaseDate:" + mBaseDate.toString());
    }

    /**
     * Compute DATE from Y-Offset
     * @param yOffset
     * @return
     */
     public Calendar dateFromYOffset(int yOffset) {
        long nthWeeks = yOffset / mWeekHeight;
        long millsSinceBaseDate = nthWeeks * ONEWEEK_IN_MILLISECONDS;
        mDate.clear();
        mDate.set(Calendar.MILLISECOND, 0);
        mDate.setTimeInMillis(mBaseDateInMillis + millsSinceBaseDate);

        /* We SHOULD call to update mDate internal data structure. 
         * Java is really strange for this thing
         **/
        mDate.getTimeInMillis();
        return mDate;
    }

    /**
     * Compute Y-Offset from DATE
     * @param date
     * @return
     */
    public long yOffsetFromDate(Calendar cal) {
        long mills = cal.getTimeInMillis();
        long nthWeeks = (mills - mBaseDateInMillis)/ONEWEEK_IN_MILLISECONDS;
        return nthWeeks * mWeekHeight;
    }
}

有人可以帮助我吗?我不是一个好的Java程序员.

解决方法:

这句话使我感到困惑:

/* I expect mBaseDate == mAnotherDate.
 * but it was different.
 */

您是否真的想通过比较来检查是否相等:
    如果(mBaseDate == mAnotherDate){System.out.println(“它们是相同的”); }

如果是这样,您的问题是您误解了“ ==”运算符在Java中的工作方式.它比较引用,而不是比较基础对象数据,并且由于这些对象是不同的对象(具有相同的值),因此始终为假.有关更多详细信息,请参见Java Notes on comparison operators.

另外,这些行对我来说真的很可疑:

/* We SHOULD call to update mDate internal data structure. 
* Java is really strange for this thing
**/
mDate.getTimeInMillis();

如果Android出现需要您执行此操作的错误,我会感到非常惊讶,但是我想一切皆有可能.没有这个电话,您会遇到什么问题?

calendar java_java中Calendar类的使用讲解

calendar java_java中Calendar类的使用讲解

大家好,又见面了,我是你们的朋友全栈君。

Calendar类是我们在工作中经常用到时间相关的一个工具类;比如月初、月末、年初、年末、指定月份所在季度的季末等操作,对它有更深入的了解,在工作中会起到事半功倍的效果,下面就来了解一下吧!!!

**一.Calendar类概述

Calendar是日历类,该类将所有可能用到的时间信息封装为静态成员变量,方便获取。常用方法如下如下://根据日历的规则,为给定的日历字段添加或减去指定的时间量。

abstract void add(int field, int amount)

//判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。

boolean after(Object when)

// 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。

boolean before(Object when)

//给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。

int getActualMaximum(int field)

// 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。

int getActualMinimum(int field)

// 获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。

int getFirstDayOfWeek()

//返回此 Calendar 实例给定日历字段的最高的最小值。

abstract int getGreatestMinimum(int field)

//使用默认时区和语言环境获得一个日历。

static Calendar getInstance()

//使用默认时区和指定语言环境获得一个日历。

static Calendar getInstance(Locale aLocale)

// 使用指定时区和默认语言环境获得一个日历。

static Calendar getInstance(TimeZone zone)

//使用指定时区和语言环境获得一个日历。

static Calendar getInstance(TimeZone zone, Locale aLocale)

//返回此 Calendar 实例给定日历字段的最低的最大值。

abstract int getLeastMaximum(int field)

//返回此 Calendar 实例给定日历字段的最大值。

abstract int getMaximum(int field)

// 获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。

int getMinimalDaysInFirstWeek()

// 设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。

void setFirstDayOfWeek(int value)

// 设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。

void setMinimalDaysInFirstWeek(int value)

// 使用给定的 Date 设置此 Calendar 的时间。

void setTime(Date date)

// 用给定的 long 值设置此 Calendar 的当前时间值。

void setTimeInMillis(long millis)

//返回此日历的字符串表示形式。

String toString()

注:Calendar类的属性有很多,比如:

YEAR 年

MONTH 月(注意:从0开始算起,最大11;0代表1月,11代表12月)

DATE 天

HOUR 时

MINUTE分

SECOND秒

**二.使用案列如下:Calendar calendar=Calendar.getInstance(); //通过getInstance方法获取Calendar的引用;

calendar.setTime(new Date());

System.out.println(“现在时间是:”+new Date());

String year=String.valueOf(calendar.get(Calendar.YEAR)); //现在是那一年

String month=String.valueOf(calendar.get(Calendar.MONTH)+1); //现在是几月份

String day=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)); //现在是月份的第几天

String week=String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)-1); //现在是星期几

System.out.println(“现在时间是:”+year+”年”+month+”月”+day+”日,星期”+week);

long year2016=calendar.getTimeInMillis();

calendar.set(1989,9,26);//这里与真实的月份之间相差1 //设置时间 (year,month,day)

long year1989=calendar.getTimeInMillis();

long days=(year2016-year1989)/(1000*60*60*24);

System.out.println(“今天和1989年10月26日相隔”+days+”天,”+”也就是说我在这个美丽的星球上已经幸福的生活了”+days+”天。”);

System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //获取设置后的那天是当年中的第几天

System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //获取设置后的那天是当月中的第几天

System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//获取设置后的那天是当星期中的第几天

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

CalendarExtender使用Java更改日期

CalendarExtender使用Java更改日期

我的页面上有一个CalendarExtender控件,有时必须将日期更改为下一个发生的星期日。我当前正在使用控件的OnClientDateSelectionChanged属性来调用一个函数,该函数将在日期中增加几天,直到其星期日为止。

我遇到的问题是,如果我在日历中选择了星期二,则文本框将显示下一个星期日,但是日历中的选定日期仍然是星期二。

如何更新CalendarExtender使其具有在javascript中选择的新日期?CalendarExtendar连接到的文本框显示正确的日期…

答案1

小编典典

改变作为文本框的值 的TargetControlIDCalendarExtender 牵动 选择的日期 ,如果满足以下2个条件:

  1. 一个 平变化 事件是由手动更改文本或通过调用的显式的JavaScript fireEvent()方法在文本框烧制(无论是。
  2. 格式 在文本框中输入的日期相匹配由CalendarExtender控制使用的格式相同。

话虽如此,正确的处理方法是调用set_selectedDate()CalendarExtender控件的函数。此调用不仅可以在“日历”上设置选定内容,还可以同时在“目标”文本框中设置选定内容。

这是示例代码:

<cc1:CalendarExtender ID="CalendarExtender1" runat="server"         OnClientDateSelectionChanged="dateSelectionChanged"         TargetControlID="txtDate" PopupButtonID="imgCalendar"></cc1:CalendarExtender><script type="text/javascript">  function dateSelectionChanged(sender, args){    selectedDate = sender.get_selectedDate();    /* replace this next line with your JS code to get the Sunday date */    sundayDate = getSundayDateUsingYourAlgorithm(selectedDate);     /* this sets the date on both the calendar and textbox */    sender.set_SelectedDate(sundayDate);  }</script>

我们今天的关于如何在GWT中使用java.util.Calendargwt java的分享已经告一段落,感谢您的关注,如果您想了解更多关于2月来自java.util.Calendar的奇怪行为、Android java.util.Calendar-时差、calendar java_java中Calendar类的使用讲解、CalendarExtender使用Java更改日期的相关信息,请在本站查询。

本文标签: