本文将分享java实现日历功能的详细内容,并且还将对java实现简单的日历功能进行详尽解释,此外,我们还将为大家带来关于Android使用GridView实现日历功能示例(详细代码)、Django开发
本文将分享java实现日历功能的详细内容,并且还将对java实现简单的日历功能进行详尽解释,此外,我们还将为大家带来关于Android使用GridView实现日历功能示例(详细代码)、Django开发的应用程序中使用admin自带小控件(以实现日历功能的AdminDateWidget为例)、Java JTable 实现日历的示例、JavaScript快速实现日历效果的相关知识,希望对你有所帮助。
本文目录一览:- java实现日历功能(java实现简单的日历功能)
- Android使用GridView实现日历功能示例(详细代码)
- Django开发的应用程序中使用admin自带小控件(以实现日历功能的AdminDateWidget为例)
- Java JTable 实现日历的示例
- JavaScript快速实现日历效果
java实现日历功能(java实现简单的日历功能)
本文实例为大家分享了java实现日历功能的具体代码,供大家参考,具体内容如下
完成一个 java application应用程序,输出一份当前所在时区当前时间的一个月的日历(1号到28/29/30/31号,以及每天对应为星期几)。
思路:
(1)获得这一年是否是闰年。闰年的2月只有28天,非闰年2月有29天。其他1、3、5、7、8、10、12月每月31天,2、4、6、9、11每月30天。
(2)根据上一步获得这个月的总天数。
(3)获得这个月第一天是星期几。然后依次填充。直到这个月最后一天。
代码如下:
import java.text.*; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scanner; class MyCalendar { public static void main(String[] args) throws ParseException { int maxDay = 0; int firstDay = 0; int currentDay = 0; System.out.println("请输入一个日期:格式为:2020-02-02"); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); //键盘输入日期格式的字符串 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(str); //将字符串转化为指定的日期格式 Calendar calendar = new GregorianCalendar(); calendar.setTime(date); //将日期转化为日历 maxDay = calendar.getActualMaximum(Calendar.DATE); //当前日期中当前月对应的最大天数 currentDay = calendar.get(Calendar.DATE); //当前日期中的当前天 calendar.set(Calendar.DATE, 1); // 设置为当前月的第一天 firstDay = calendar.get(Calendar.DAY_OF_WEEK); //当前日期中当前月第一天对应的星期数 System.out.println("------------------------------------------------------"); System.out.println("周日\t周一\t周二\t周三\t周四\t周五\t周六\n"); System.out.println("------------------------------------------------------"); for (int j = 1; j < firstDay; j++) //当前月第一天之前以空格输出 { System.out.print("\t"); } for (int i = 1; i <= maxDay; i++) //输出当月每一天的号数 { if (i == currentDay) //以*i表示当天日期 { System.out.print("*"); } System.out.print(i + "\t"); if ((i - (8 - firstDay)) % 7 == 0) //以七天为一个循环输出所有天数 { System.out.println("\n"); } } } }
结果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
- Java实现简单日历小程序 Java图形界面小日历开发
- Java实现桌面日历
- Java实现窗体程序显示日历表
- Java实现窗体程序显示日历
- Java编写实现窗体程序显示日历
- java实现日历窗口小程序
- 日历显示读出输入的年月的java代码
- Java中的Calendar日历API用法完全解析
- Java实现的日历功能完整示例
- Java实现简单的日历界面
Android使用GridView实现日历功能示例(详细代码)
Android使用GridView实现日历功能示例,代码有点多,发个图先:
如果懒得往下看的,可以直接下载源码吧,最近一直有人要,由于时间太久了,懒得找出来整理,今天又看到有人要,正好没事就整理了一下
源码下载。。。。
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/lay_title"android:layout_width="fill_parent" > <TextView android:id="@+id/btn_back"/> <TextView android:id="@+id/tv_top"android:text="请选择日期" /> <TextView android:id="@+id/btn_goback_to_today"android:text="今天" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="53.0dip" android:background="#ff394147" android:gravity="center_vertical" > <LinearLayout android:id="@+id/btn_prev_month" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="0.2" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/left_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/triangle06_states" android:duplicateParentState="true" android:text="" android:textSize="16.0dip" /> </LinearLayout> <LinearLayout android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="0.6" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/tv_month" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="xxxx年14月" android:textColor="#ffffffff" android:textSize="21.0dip" /> </LinearLayout> <LinearLayout android:id="@+id/btn_next_month" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="0.2" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/right_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/triangle05_states" android:duplicateParentState="true" android:text="" android:textSize="16.0dip" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="22.0dip" android:background="#ff8091a8" > <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周日" android:textColor="#ffffffff" android:textSize="14.0dip" /> <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周一" android:textColor="#ffffffff" android:textSize="14.0dip" /> <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周二" android:textColor="#ffffffff" android:textSize="14.0dip" /> <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周三" android:textColor="#ffffffff" android:textSize="14.0dip" /> <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周四" android:textColor="#ffffffff" android:textSize="14.0dip" /> <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周五" android:textColor="#ffffffff" android:textSize="14.0dip" /> <TextView android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:gravity="center" android:text="周六" android:textColor="#ffffffff" android:textSize="14.0dip" /> </LinearLayout> <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00000000" android:clickable="true" android:clipChildren="true" android:columnWidth="55.0dip" android:horizontalSpacing="1.0dip" android:listSelector="@null" android:numColumns="7" android:paddingBottom="1.0dip" android:stretchMode="columnWidth" android:verticalSpacing="1.0dip" /> </LinearLayout>
Item:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#FFFFFF" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:gravity="center" android:layout_width="46dp" android:layout_height="55dp" android:id="@+id/tvtext" /> </LinearLayout>
Adapter:
/** * 日历gridview中的每一个item显示的textview * @author lmw * */ public class Calendaradapter extends BaseAdapter { private boolean isLeapyear = false; //是否为闰年 private int daysOfMonth = 0; //某月的天数 private int dayOfWeek = 0; //具体某一天是星期几 private int lastDaysOfMonth = 0; //上一个月的总天数 private Context context; private String[] dayNumber = new String[42]; //一个gridview中的日期存入此数组中 // private static String week[] = {"周日","周一","周二","周三","周四","周五","周六"}; private SpecialCalendar sc = null; private LunarCalendar lc = null; private Resources res = null; private Drawable drawable = null; private String currentYear = ""; private String currentMonth = ""; private String currentDay = ""; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); private int currentFlag = -1; //用于标记当天 private int[] schDateTagFlag = null; //存储当月所有的日程日期 private String showYear = ""; //用于在头部显示的年份 private String showMonth = ""; //用于在头部显示的月份 private String animalsYear = ""; private String leapMonth = ""; //闰哪一个月 private String cyclical = ""; //天干地支 //系统当前时间 private String sysDate = ""; private String sys_year = ""; private String sys_month = ""; private String sys_day = ""; public Calendaradapter(){ Date date = new Date(); sysDate = sdf.format(date); //当期日期 sys_year = sysDate.split("-")[0]; sys_month = sysDate.split("-")[1]; sys_day = sysDate.split("-")[2]; } public Calendaradapter(Context context,Resources rs,int jumpMonth,int jumpYear,int year_c,int month_c,int day_c){ this(); this.context= context; sc = new SpecialCalendar(); lc = new LunarCalendar(); this.res = rs; int stepYear = year_c+jumpYear; int stepMonth = month_c+jumpMonth ; if(stepMonth > 0){ //往下一个月滑动 if(stepMonth%12 == 0){ stepYear = year_c + stepMonth/12 -1; stepMonth = 12; }else{ stepYear = year_c + stepMonth/12; stepMonth = stepMonth%12; } }else{ //往上一个月滑动 stepYear = year_c - 1 + stepMonth/12; stepMonth = stepMonth%12 + 12; if(stepMonth%12 == 0){ } } currentYear = String.valueOf(stepYear);; //得到当前的年份 currentMonth = String.valueOf(stepMonth); //得到本月 (jumpMonth为滑动的次数,每滑动一次就增加一月或减一月) currentDay = String.valueOf(day_c); //得到当前日期是哪天 getCalendar(Integer.parseInt(currentYear),Integer.parseInt(currentMonth)); } public Calendaradapter(Context context,int year,int month,int day){ this(); this.context= context; sc = new SpecialCalendar(); lc = new LunarCalendar(); this.res = rs; currentYear = String.valueOf(year);; //得到跳转到的年份 currentMonth = String.valueOf(month); //得到跳转到的月份 currentDay = String.valueOf(day); //得到跳转到的天 getCalendar(Integer.parseInt(currentYear),Integer.parseInt(currentMonth)); } @Override public int getCount() { // Todo Auto-generated method stub return dayNumber.length; } @Override public Object getItem(int position) { // Todo Auto-generated method stub return position; } @Override public long getItemId(int position) { // Todo Auto-generated method stub return position; } @Override public View getView(int position,View convertView,ViewGroup parent) { if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.calendar_item,null); } TextView textView = (TextView) convertView.findViewById(R.id.tvtext); String d = dayNumber[position].split("\\.")[0]; String dv = dayNumber[position].split("\\.")[1]; SpannableString sp = new SpannableString(d+"\n"+dv); sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD),d.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); sp.setSpan(new RelativeSizeSpan(1.2f),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); if(dv != null ||dv != ""){ sp.setSpan(new RelativeSizeSpan(0.75f),d.length()+1,dayNumber[position].length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } // sp.setSpan(new ForegroundColorSpan(Color.magenta),14,16,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) textView.setText(sp); textView.setTextColor(Color.GRAY); // if(position<7){ // //设置周 // textView.setTextColor(Color.WHITE); // textView.setBackgroundColor(color.search_txt_color); // textView.setTextSize(14); // } if (position < daysOfMonth + dayOfWeek && position >= dayOfWeek) { // 当前月信息显示 textView.setTextColor(Color.BLACK);// 当月字体设黑 drawable = res.getDrawable(R.drawable.current_day_bgc); } if(schDateTagFlag != null && schDateTagFlag.length >0){ for(int i = 0; i < schDateTagFlag.length; i++){ if(schDateTagFlag[i] == position){ //设置日程标记背景 textView.setBackgroundResource(R.drawable.mark); } } } if(currentFlag == position){ //设置当天的背景 drawable = res.getDrawable(R.drawable.current_day_bgc); textView.setBackgroundDrawable(drawable); textView.setTextColor(Color.WHITE); } return convertView; } //得到某年的某月的天数且这月的第一天是星期几 public void getCalendar(int year,int month){ isLeapyear = sc.isLeapYear(year); //是否为闰年 daysOfMonth = sc.getDaysOfMonth(isLeapyear,month); //某月的总天数 dayOfWeek = sc.getWeekdayOfMonth(year,month); //某月第一天为星期几 lastDaysOfMonth = sc.getDaysOfMonth(isLeapyear,month-1); //上一个月的总天数 Log.d("DAY",isLeapyear+" ====== "+daysOfMonth+" ============ "+dayOfWeek+" ========= "+lastDaysOfMonth); getweek(year,month); } //将一个月中的每一天的值添加入数组dayNuber中 private void getweek(int year,int month) { int j = 1; int flag = 0; String lunarDay = ""; //得到当前月的所有日程日期(这些日期需要标记) for (int i = 0; i < dayNumber.length; i++) { // 周一 // if(i<7){ // dayNumber[i]=week[i]+"."+" "; // } if(i < dayOfWeek){ //前一个月 int temp = lastDaysOfMonth - dayOfWeek+1; lunarDay = lc.getLunarDate(year,month-1,temp+i,false); dayNumber[i] = (temp + i)+"."+lunarDay; }else if(i < daysOfMonth + dayOfWeek){ //本月 String day = String.valueOf(i-dayOfWeek+1); //得到的日期 lunarDay = lc.getLunarDate(year,month,i-dayOfWeek+1,false); dayNumber[i] = i-dayOfWeek+1+"."+lunarDay; //对于当前月才去标记当前日期 if(sys_year.equals(String.valueOf(year)) && sys_month.equals(String.valueOf(month)) && sys_day.equals(day)){ //标记当前日期 currentFlag = i; } setShowYear(String.valueOf(year)); setShowMonth(String.valueOf(month)); setAnimalsYear(lc.animalsYear(year)); setLeapMonth(lc.leapMonth == 0?"":String.valueOf(lc.leapMonth)); setCyclical(lc.cyclical(year)); }else{ //下一个月 lunarDay = lc.getLunarDate(year,month+1,j,false); dayNumber[i] = j+"."+lunarDay; j++; } } String abc = ""; for(int i = 0; i < dayNumber.length; i++){ abc = abc+dayNumber[i]+":"; } Log.d("DAYNUMBER",abc); } public void matchScheduleDate(int year,int day){ } /** * 点击每一个item时返回item中的日期 * @param position * @return */ public String getDateByClickItem(int position){ return dayNumber[position]; } /** * 在点击gridView时,得到这个月中第一天的位置 * @return */ public int getStartPositon(){ return dayOfWeek+7; } /** * 在点击gridView时,得到这个月中最后一天的位置 * @return */ public int getEndPosition(){ return (dayOfWeek+daysOfMonth+7)-1; } public String getShowYear() { return showYear; } public void setShowYear(String showYear) { this.showYear = showYear; } public String getShowMonth() { return showMonth; } public void setShowMonth(String showMonth) { this.showMonth = showMonth; } public String getAnimalsYear() { return animalsYear; } public void setAnimalsYear(String animalsYear) { this.animalsYear = animalsYear; } public String getLeapMonth() { return leapMonth; } public void setLeapMonth(String leapMonth) { this.leapMonth = leapMonth; } public String getCyclical() { return cyclical; } public void setCyclical(String cyclical) { this.cyclical = cyclical; } }
计算类
import java.util.Calendar; public class SpecialCalendar { private int daysOfMonth = 0; //某月的天数 private int dayOfWeek = 0; //具体某一天是星期几 // 判断是否为闰年 public boolean isLeapYear(int year) { if (year % 100 == 0 && year % 400 == 0) { return true; } else if (year % 100 != 0 && year % 4 == 0) { return true; } return false; } //得到某月有多少天数 public int getDaysOfMonth(boolean isLeapyear,int month) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: daysOfMonth = 31; break; case 4: case 6: case 9: case 11: daysOfMonth = 30; break; case 2: if (isLeapyear) { daysOfMonth = 29; } else { daysOfMonth = 28; } } return daysOfMonth; } //指定某年中的某月的第一天是星期几 public int getWeekdayOfMonth(int year,int month){ Calendar cal = Calendar.getInstance(); cal.set(year,1); dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1; return dayOfWeek; } }
节日和阴历计算类
关于日历实现代码里0x04bd8,0x04ae0,0x0a570的解释:
new Array( 0x04bd8,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x186e3,0x092e0,0x1c8d7,0x0c950,0x1d8a6,0x0b550,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,0x06ca0,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,0x0aea6,0x0ab50,0x04b60,0x0aae4,0x05260,0x0f263,0x05b57,0x096d0,0x04dd5,0x04ad0,0x0d4d4,0x0d558,0x0b6a0,0x195a6,0x049b0,0x0a974,0x0b27a,0x0af46,0x0ab60,0x04af5,0x064b0,0x074a3,0x06b58,0x055c0,0x096d5,0x0c960,0x0d954,0x0da50,0x07552,0x0abb7,0x0cab5,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x15176,0x0a930,0x07954,0x05b52,0x0a6e6,0x0a4e0,0x0ea65,0x0d530,0x05aa0,0x076a3,0x04bd7,0x1d0b6,0x0d520,0x0dd45,0x0b5a0,0x056d0,0x055b2,0x0a577,0x0aa50,0x1b255,0x06d20,0x0ada0,0x14b63);
正确的解释是:
二进制形式
xxxx xxxx xxxx xxxx xxxx
20-17 16-12 12-9 8-5 4-1
1-4: 表示当年有无闰年,有的话,为闰月的月份,没有的话,为0。
5-16:为除了闰月外的正常月份是大月还是小月,1为30天,0为29天。
注意:从1月到12月对应的是第16位到第5位。
17-20: 表示闰月是大月还是小月,仅当存在闰月的情况下有意义。
举个例子:
1980年的数据是: 0x095b0
二进制:0000 1001 0101 1011 0000
表示1980年没有闰月,从1月到12月的天数依次为:30、29、29、30 、29、30、29、30、 30、29、30、30。
1982年的数据是:0x0a974
0000 1010 0 1001 0111 0100
表示1982年的4月为闰月,即有第二个4月,且是闰小月。
从1月到13月的天数依次为:30、29、30、29、 29(闰月)、 30、29、29、30、 29、30、30、30。
public class LunarCalendar { private int year; //农历的年份 private int month; private int day; private String lunarMonth; //农历的月份 private boolean leap; public int leapMonth = 0; //闰的是哪个月 final static String chineseNumber[] = { "一","二","三","四","五","六","七","八","九","十","十一","十二" }; static SimpleDateFormat chineseDateFormat = new SimpleDateFormat( "yyyy年MM月dd日"); final static long[] lunarInfo = new long[] { 0x04bd8,0x0a5d0,0x052d0,0x0ada0 }; //农历部分假日 final static String[] lunarHoliday = new String[]{ "0101 春节","0115 元宵","0505 端午","0707 七夕情人","0715 中元","0815 中秋","0909 重阳","1208 腊八","1224 小年","0100 除夕" }; //公历部分节假日 final static String[] solarHoliday = new String[]{ "0101 元旦","0214 情人","0308 妇女","0312 植树","0315 消费者权益日","0401 愚人","0501 劳动","0504 青年","0512 护士","0601 儿童","0701 建党","0801 建军","0808 父亲","0909 毛泽东逝世纪念","0910 教师","0928 孔子诞辰","1001 国庆","1006 老人","1024 联合国日","1112 孙中山诞辰纪念","1220 澳门回归纪念","1225 圣诞","1226 毛泽东诞辰纪念" }; // ====== 传回农历 y年的总天数 final private static int yearDays(int y) { int i,sum = 348; for (i = 0x8000; i > 0x8; i >>= 1) { if ((lunarInfo[y - 1900] & i) != 0) sum += 1; } return (sum + leapDays(y)); } // ====== 传回农历 y年闰月的天数 final private static int leapDays(int y) { if (leapMonth(y) != 0) { if ((lunarInfo[y - 1900] & 0x10000) != 0) return 30; else return 29; } else return 0; } // ====== 传回农历 y年闰哪个月 1-12,没闰传回 0 final private static int leapMonth(int y) { return (int) (lunarInfo[y - 1900] & 0xf); } // ====== 传回农历 y年m月的总天数 final private static int monthDays(int y,int m) { if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) return 29; else return 30; } // ====== 传回农历 y年的生肖 final public String animalsYear(int year) { final String[] Animals = new String[] { "鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪" }; return Animals[(year - 4) % 12]; } // ====== 传入 月日的offset 传回干支,0=甲子 final private static String cyclicalm(int num) { final String[] Gan = new String[] { "甲","乙","丙","丁","戊","己","庚","辛","壬","癸" }; final String[] Zhi = new String[] { "子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥" }; return (Gan[num % 10] + Zhi[num % 12]); } // ====== 传入 offset 传回干支,0=甲子 final public String cyclical(int year) { int num = year - 1900 + 36; return (cyclicalm(num)); } public static String getChinaDayString(int day) { String chineseTen[] = { "初","廿","卅" }; int n = day % 10 == 0 ? 9 : day % 10 - 1; if (day > 30) return ""; if (day == 10) return "初十"; else return chineseTen[day / 10] + chineseNumber[n]; } /** */ /** * 传出y年m月d日对应的农历. yearCyl3:农历年与1864的相差数 ? monCyl4:从1900年1月31日以来,闰月数 * dayCyl5:与1900年1月31日相差的天数,再加40 ? * * isday: 这个参数为false---日期为节假日时,阴历日期就返回节假日 ,true---不管日期是否为节假日依然返回这天对应的阴历日期 * @param cal * @return */ public String getLunarDate(int year_log,int month_log,int day_log,boolean isday) { // @SuppressWarnings("unused") int yearCyl,monCyl,dayCyl; //int leapMonth = 0; String Nowadays; Date baseDate = null; Date Nowaday = null; try { baseDate = chineseDateFormat.parse("1900年1月31日"); } catch (ParseException e) { e.printstacktrace(); // To change body of catch statement use // Options | File Templates. } Nowadays = year_log + "年" + month_log + "月" + day_log + "日"; try { Nowaday = chineseDateFormat.parse(Nowadays); } catch (ParseException e) { e.printstacktrace(); // To change body of catch statement use // Options | File Templates. } // 求出和1900年1月31日相差的天数 int offset = (int) ((Nowaday.getTime() - baseDate.getTime()) / 86400000L); dayCyl = offset + 40; monCyl = 14; // 用offset减去每农历年的天数 // 计算当天是农历第几天 // i最终结果是农历的年份 // offset是当年的第几天 int iYear,daysOfYear = 0; for (iYear = 1900; iYear < 10000 && offset > 0; iYear++) { daysOfYear = yearDays(iYear); offset -= daysOfYear; monCyl += 12; } if (offset < 0) { offset += daysOfYear; iYear--; monCyl -= 12; } // 农历年份 year = iYear; setYear(year); //设置公历对应的农历年份 yearCyl = iYear - 1864; leapMonth = leapMonth(iYear); // 闰哪个月,1-12 leap = false; // 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天 int iMonth,daysOfMonth = 0; for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) { // 闰月 if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) { --iMonth; leap = true; daysOfMonth = leapDays(year); } else daysOfMonth = monthDays(year,iMonth); offset -= daysOfMonth; // 解除闰月 if (leap && iMonth == (leapMonth + 1)) leap = false; if (!leap) monCyL++; } // offset为0时,并且刚才计算的月份是闰月,要校正 if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { if (leap) { leap = false; } else { leap = true; --iMonth; --monCyl; } } // offset小于0时,也要校正 if (offset < 0) { offset += daysOfMonth; --iMonth; --monCyl; } month = iMonth; setLunarMonth(chineseNumber[month - 1] + "月"); //设置对应的阴历月份 day = offset + 1; if(!isday){ //如果日期为节假日则阴历日期则返回节假日 //setLeapMonth(leapMonth); for(int i = 0; i < solarHoliday.length; i++){ //返回公历节假日名称 String sd = solarHoliday[i].split(" ")[0]; //节假日的日期 String sdv = solarHoliday[i].split(" ")[1]; //节假日的名称 String smonth_v = month_log+""; String sday_v = day_log+""; String smd = ""; if(month_log < 10){ smonth_v = "0"+month_log; } if(day_log < 10){ sday_v = "0"+day_log; } smd = smonth_v+sday_v; if(sd.trim().equals(smd.trim())){ return sdv; } } for(int i = 0; i < lunarHoliday.length; i++){ //返回农历节假日名称 String ld =lunarHoliday[i].split(" ")[0]; //节假日的日期 String ldv = lunarHoliday[i].split(" ")[1]; //节假日的名称 String lmonth_v = month+""; String lday_v = day+""; String lmd = ""; if(month < 10){ lmonth_v = "0"+month; } if(day < 10){ lday_v = "0"+day; } lmd = lmonth_v+lday_v; if(ld.trim().equals(lmd.trim())){ return ldv; } } } if (day == 1) return chineseNumber[month - 1] + "月"; else return getChinaDayString(day); } public String toString() { if (chineseNumber[month - 1] == "一" && getChinaDayString(day) == "初一") return "农历" + year + "年"; else if (getChinaDayString(day) == "初一") return chineseNumber[month - 1] + "月"; else return getChinaDayString(day); // return year + "年" + (leap ? "闰" : "") + chineseNumber[month - 1] + // "月" + getChinaDayString(day); } /*public static void main(String[] args) { System.out.println(new LunarCalendar().getLunarDate(2012,1,23)); }*/ public int getLeapMonth() { return leapMonth; } public void setLeapMonth(int leapMonth) { this.leapMonth = leapMonth; } /** * 得到当前日期对应的阴历月份 * @return */ public String getLunarMonth() { return lunarMonth; } public void setLunarMonth(String lunarMonth) { this.lunarMonth = lunarMonth; } /** * 得到当前年对应的农历年份 * @return */ public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
Activity
/** * 日历显示activity * * */ public class Calendaractivity extends Activity implements OnGestureListener { private GestureDetector gestureDetector = null; private Calendaradapter calV = null; private GridView gridView = null; private TextView topText = null; private static int jumpMonth = 0; //每次滑动,增加或减去一个月,默认为0(即显示当前月) private static int jumpYear = 0; //滑动跨越一年,则增加或者减去一年,默认为0(即当前年) private int year_c = 0; private int month_c = 0; private int day_c = 0; private String currentDate = ""; private Bundle bd=null;//发送参数 private Bundle bun=null;//接收参数 private String ruzhuTime; private String lidianTime; private String state=""; public Calendaractivity() { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); currentDate = sdf.format(date); //当期日期 year_c = Integer.parseInt(currentDate.split("-")[0]); month_c = Integer.parseInt(currentDate.split("-")[1]); day_c = Integer.parseInt(currentDate.split("-")[2]); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityList.activityList.add(this); setContentView(R.layout.calendar); bd=new Bundle();//out bun=getIntent().getExtras();//in if(bun!=null&&bun.getString("state").equals("ruzhu")) { state=bun.getString("state"); System.out.println("%%%%%%"+state); }else if(bun!=null&&bun.getString("state").equals("lidian")){ state=bun.getString("state"); System.out.println("|||||||||||"+state); } gestureDetector = new GestureDetector(this); // bd=new Bundle(); calV = new Calendaradapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c); addGridView(); gridView.setAdapter(calV); topText = (TextView) findViewById(R.id.tv_month); addTextToTopTextView(topText); } @Override public boolean onFling(MotionEvent e1,MotionEvent e2,float veLocityX,float veLocityY) { int gvFlag = 0; //每次添加gridview到viewflipper中时给的标记 if (e1.getX() - e2.getX() > 120) { //像左滑动 addGridView(); //添加一个gridView jumpMonth++; //下一个月 calV = new Calendaradapter(this,day_c); gridView.setAdapter(calV); addTextToTopTextView(topText); gvFlag++; return true; } else if (e1.getX() - e2.getX() < -120) { //向右滑动 addGridView(); //添加一个gridView jumpMonth--; //上一个月 calV = new Calendaradapter(this,day_c); gridView.setAdapter(calV); gvFlag++; addTextToTopTextView(topText); return true; } return false; } /** * 创建菜单 */ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,menu.FirsT,"今天"); return super.onCreateOptionsMenu(menu); } /** * 选择菜单 */ @Override public boolean onMenuItemSelected(int featureId,MenuItem item) { switch (item.getItemId()){ case Menu.FirsT: //跳转到今天 int xMonth = jumpMonth; int xYear = jumpYear; int gvFlag =0; jumpMonth = 0; jumpYear = 0; addGridView(); //添加一个gridView year_c = Integer.parseInt(currentDate.split("-")[0]); month_c = Integer.parseInt(currentDate.split("-")[1]); day_c = Integer.parseInt(currentDate.split("-")[2]); calV = new Calendaradapter(this,day_c); gridView.setAdapter(calV); addTextToTopTextView(topText); gvFlag++; break; } return super.onMenuItemSelected(featureId,item); } @Override public boolean onTouchEvent(MotionEvent event) { return this.gestureDetector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { // Todo Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // Todo Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1,float distanceX,float distanceY) { // Todo Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent e) { // Todo Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // Todo Auto-generated method stub return false; } //添加头部的年份 闰哪月等信息 public void addTextToTopTextView(TextView view){ StringBuffer textDate = new StringBuffer(); textDate.append(calV.getShowYear()).append("年").append( calV.getShowMonth()).append("月").append("\t"); view.setText(textDate); view.setTextColor(Color.WHITE); view.setTypeface(Typeface.DEFAULT_BOLD); } //添加gridview private void addGridView() { gridView =(GridView)findViewById(R.id.gridview); gridView.setonTouchListener(new OnTouchListener() { //将gridview中的触摸事件回传给gestureDetector @Override public boolean onTouch(View v,MotionEvent event) { // Todo Auto-generated method stub return Calendaractivity.this.gestureDetector.onTouchEvent(event); } }); gridView.setonItemClickListener(new OnItemClickListener() { //gridView中的每一个item的点击事件 @Override public void onItemClick(AdapterView<?> arg0,View arg1,int position,long arg3) { //点击任何一个item,得到这个item的日期(排除点击的是周日到周六(点击不响应)) int startPosition = calV.getStartPositon(); int endPosition = calV.getEndPosition(); if(startPosition <= position+7 && position <= endPosition-7){ String scheduleDay = calV.getDateByClickItem(position).split("\\.")[0]; //这一天的阳历 //String scheduleLunarDay = calV.getDateByClickItem(position).split("\\.")[1]; //这一天的阴历 String scheduleYear = calV.getShowYear(); String scheduleMonth = calV.getShowMonth(); // Toast.makeText(Calendaractivity.this,scheduleYear+"-"+scheduleMonth+"-"+scheduleDay,2000).show(); ruzhuTime=scheduleMonth+"月"+scheduleDay+"日"; lidianTime=scheduleMonth+"月"+scheduleDay+"日"; Intent intent=new Intent(); if(state.equals("ruzhu")) { bd.putString("ruzhu",ruzhuTime); System.out.println("ruzhuuuuuu"+bd.getString("ruzhu")); }else if(state.equals("lidian")){ bd.putString("lidian",lidianTime); } intent.setClass(Calendaractivity.this,HotelActivity.class); intent.putExtras(bd); startActivity(intent); finish(); } } }); } }
源码下载。。。。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
Django开发的应用程序中使用admin自带小控件(以实现日历功能的AdminDateWidget为例)
AdminDateWidget 简介
AdminDateWidget是admin自带的日历小控件,在admin应用程序中用于Datefield字段,其效果如下图所示:

AdminDateWidget位于django.contrib.admin.widgets.py中。
在其它应用程序中使用AdminDateWidget
使用AdminDateWidget需要修改form及模板。
修改form
首先,导入AdminDateWidget:
from django.contrib.admin.widgets import AdminDateWidget
然后,重设DateField字段的widget:
class TestForm(forms.Form):
start_time = forms.DateField(widget=AdminDateWidget, label=''start time'')
修改模板
假设模板名称为history.html。
在history.html的head中,增加
{{ form.media }}
其中,form为views.py中定义的view返回值传递的TestForm实例,即:
def testwidget(request):
form = TestForm()
return render(request, ''myapp/history.html'', {''form'': form})
form.media可以被render渲染为:
<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>
因此,也可以直接在head中增加上述两个JavaScript语句而不使用{{ form.media }}
。
要使上述两个语句实现功能,还需要以下CSS及JavaScript(放在上述两个语句之前)。
{% load static %}
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" />
<script type="text/javascript" src="{% url ''admin:jsi18n'' %}"></script>
<script type="text/javascript" src="{% static ''admin/js/core.js'' %}"></script>
<script type="text/javascript" src="{% static ''admin/js/vendor/jquery/jquery.js'' %}"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="/static/admin/js/actions.js"></script>
<script type="text/javascript" src="/static/admin/js/vendor/xregexp/xregexp.js"></script>
即可实现功能。
备注:
本文html只实现了功能,不符合Django html模板语言设计规范。
Java JTable 实现日历的示例
这篇文章主要介绍了Java JTable 实现日历的示例,帮助大家更好的理解和学习Java jtable的使用方法,感兴趣的朋友可以了解下
效果图:
主要思想:日历最核心的功能就是能显示某年某月对应的日期和星期几。因此只要实现传入具体的年份和月份,得到一组存放了日期的数组a[ ]即可。其中数组的大小设置成42,要考虑的问题是当月的第一天对应星期几。日期数组中的前七个,肯定包含了当月的第一天,把这一天找到,将“1”填入,后面的日期依次累加直到加完该月最后一天为止。
MyCalendar类:
得到用于显示日期数组a[ ]
import java.util.Calendar; public class MyCalendar { String day[]; int year = 2020,month=0; public String[] getDay() { return day; } public void setDay(String[] day) { this.day = day; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } private boolean isLeapYear() { if(this.year%4==0 && this.year%100!=0){ return true; }else if(this.year%400==0){ return true; }else return false; } //获得显示数组 public String[] getCalendar(){ Calendar calendar=Calendar.getInstance(); String a[]=new String[42]; calendar.set(year,month-1,1); int weekday=calendar.get(Calendar.DAY_OF_WEEK)-1; int day=0; int days = 31; if (this.month == 4 || this.month == 6 || this.month == 9 || this.month == 11) days = 30; if (this.month == 2 && isLeapYear()) days = 29; if (this.month == 2 && !isLeapYear()) days = 28; for(int i = weekday,n=1;i
MyFrame类:
创造显示面板,主要用到JTable。
public class MyFrame extends JFrame implements ActionListener { //存储数据 MyCalendar calendar = new MyCalendar(); JComboBox choiceYear,choiceMonth; JTable table = null; JPanel root = new JPanel(); JLabel lyear, lmonth; private Object[] name = {"日","一","二","三","四","五","六"}; private TableModel tableModel = new DefaultTableModel(name,6); // private static int row = 6; // private static int column = 7; public MyFrame(String title) { super(title); this.setContentPane(root); root.setLayout(new BorderLayout()); //年月选择栏 choiceYear=new JComboBox(); choiceMonth=new JComboBox(); lyear=new JLabel("年"); lmonth=new JLabel("月 "); for(int i=1990;i rowData = new Vector(); int row = 0; int column = 0; for(int i = 0; i rowData = new Vector(); int row = 0; int column = 0; for(int i = 0; i rowData = new Vector(); int row = 0; int column = 0; for(int i = 0; i
ShowView类:
用于显示窗口,照抄即可,无需理解。
import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class ShowView { private static void createGUI() { // 语法:因为MyFrame是JFrame的子类,所以可以这么写 JFrame frame = new MyFrame("日历"); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口的其他参数,如窗口大小 frame.setSize(400, 300); // 显示窗口 frame.setVisible(true); } public static void main(String[] args) { // 此段代码间接地调用了 createGUI() javax.swing.SwingUtilities.invokelater(new Runnable() { public void run() { createGUI(); } }); } }
以上就是Java JTable 实现日历的示例的详细内容,更多关于Java JTable 实现日历的资料请关注小编其它相关文章!
JavaScript快速实现日历效果
本文实例为大家分享了JavaScript快速实现日历效果的具体代码,供大家参考,具体内容如下
效果图
代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } #calendar { background-color: #9900ff; color: #fff; border-radius: 5px; margin: 100px auto; } #title { font-size: 1.4em; padding: 4px 0.55em; } #days th { font-weight: bold; text-align: center; padding: 4px 0.55em; } #calendar td { text-align: center; padding: 4px 20px; } #today { color: #f00; font-weight: bold; } .poin { cursor: pointer; cursor: hand; } </style> <script> window.onload=function(){ var form = document.getElementById(''calendar''); // 通过日历对象去调用自身的init方法 calendar.init(form); } var calendar = { year: null, month: null, //日的数组 dayTable: null, //初始化函数 init(form) { // 1获取日数组 this.dayTable=form.getElementsByTagName(''td''); //2创建日历,传入当前时间 this.createCalendar(form,new Date()); var nextMon=form.getElementsByTagName(''th'')[2]; var preMon=form.getElementsByTagName(''th'')[0]; preMon.onclick=function(){ calendar.clearCalendar(form) var preDate=new Date(calendar.year,calendar.month-1,1); calendar.createCalendar(form,preDate) } nextMon.onclick=function(){ calendar.clearCalendar(form) var nextDate=new Date(calendar.year,calendar.month+1,1); calendar.createCalendar(form,nextDate) } }, //清除日历数据 clearCalendar(form){ var tds=form.getElementsByTagName(''td''); for (var i = 0; i < tds.length; i++) { tds[i].innerHTML='' ''; // 清除今天的样式 tds[i].id=''''; } }, // 3生成日历 // from table表格 date要创建的日期 createCalendar(form,date){ //获取此时的年份 this.year=date.getFullYear(); //获取此时的月份 this.month=date.getMonth(); //年份月份写入日历 form.getElementsByTagName(''th'')[1].innerHTML = this.year+"年"+(this.month+1)+"月"; //获取本月的天数 var dataNum=this.getDateLen(this.year,this.month); var fristDay = this.getFristDay(calendar.year,calendar.month); // 循环将每一天的天数写入到日历中 // 让i表示日期。 for (var i = 1; i <= dataNum; i++) { this.dayTable[fristDay+i-1].innerHTML=i; var nowDate =new Date(); if(i ==nowDate.getDate() && calendar.month ==nowDate.getMonth()&&calendar.year == nowDate.getFullYear()){ // 将当期元素的id设置为today calendar.dayTable[i+fristDay-1].id = "today"; } } }, // 获取本月份的天数 getDateLen(year,month){ //获取下个月的第一天 var nextMonth=new Date(year,month+1,1); // 设置下月第一天的小时-1,也就是上个月最后一天的小时数,随便减去一个值不要超过24小时 nextMonth.setHours(nextMonth.getHours()-1); //获取此时下个月的日期,就是上个月最后一天. return nextMonth.getDate(); }, // 获取本月第一天为星期几。 getFristDay:function(year,month){ var fristDay=new Date(year,month,1); return fristDay.getDay(); } } </script> </head> <body> <table id="calendar"> <tr> <!-- 向左箭头 --> <th><<</th> <!-- 年月 --> <th id="title" colspan="5"></th> <!-- 向右箭头 --> <th>>></th> </tr> <tr id="days"> <th>日</th> <th>一</th> <th>二</th> <th>三</th> <th>四</th> <th>五</th> <th>六</th> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
- js css+html实现简单的日历
- 轻量级的原生js日历插件calendar.js使用指南
- JS学习之一个简易的日历控件
- JS日历 推荐
- Vue.js创建Calendar日历效果
- 纯js简单日历实现代码
- js编写当天简单日历效果【实现代码】
- js日历控件(可精确到分钟)
- php+javascript的日历控件
- 简约JS日历控件 实例代码
关于java实现日历功能和java实现简单的日历功能的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android使用GridView实现日历功能示例(详细代码)、Django开发的应用程序中使用admin自带小控件(以实现日历功能的AdminDateWidget为例)、Java JTable 实现日历的示例、JavaScript快速实现日历效果的相关信息,请在本站寻找。
本文标签: