本文将分享如何在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)
- 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无法找到源代码,无论如何我都可以解决此问题。
提前致谢!!!
答案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的奇怪行为
我遇到了来自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-时差
我想制作日历视图以支持触摸交互.
因此,我想构建新的自定义日历视图.
我试图使视图偏移量和实际日期值之间的映射功能.
这是我的主意:
如果我可以计算出自基准日期以来的周数(以我的情况为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类是我们在工作中经常用到时间相关的一个工具类;比如月初、月末、年初、年末、指定月份所在季度的季末等操作,对它有更深入的了解,在工作中会起到事半功倍的效果,下面就来了解一下吧!!!
**一.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控件,有时必须将日期更改为下一个发生的星期日。我当前正在使用控件的OnClientDateSelectionChanged属性来调用一个函数,该函数将在日期中增加几天,直到其星期日为止。
我遇到的问题是,如果我在日历中选择了星期二,则文本框将显示下一个星期日,但是日历中的选定日期仍然是星期二。
如何更新CalendarExtender使其具有在javascript中选择的新日期?CalendarExtendar连接到的文本框显示正确的日期…
答案1
小编典典改变作为文本框的值 的TargetControlID 为 CalendarExtender 牵动 选择的日期 ,如果满足以下2个条件:
- 一个 平变化 事件是由手动更改文本或通过调用的显式的JavaScript fireEvent()方法在文本框烧制(无论是。
- 该 格式 在文本框中输入的日期相匹配由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.Calendar和gwt java的分享已经告一段落,感谢您的关注,如果您想了解更多关于2月来自java.util.Calendar的奇怪行为、Android java.util.Calendar-时差、calendar java_java中Calendar类的使用讲解、CalendarExtender使用Java更改日期的相关信息,请在本站查询。
本文标签: