首页 文章 精选 留言 我的

精选列表

搜索[文件操作],共10000篇文章
优秀的个人博客,低调大师

深入解析vue.js数据绑定操作

废话不多说,直接进入正题!!! 数据绑定 响应式的数据绑定系统。建立绑定之后,DOM将和数据保持同步,无须手动维护DOM。使代码能够更加简洁易懂、提升效率。 数据绑定语法 1.文本插值 {{ }}Mustache标签 <span>Hello {{ name }}</span> data:{ name: 'vue' } == > Hello vue 单次插值 首次赋值后再更改vm实例属性值不会引起DOM的变化 <span v-once="name">{{ name }}</span> 2.HTML属性 Mustache标签{{ }} <div v-bind:id="'id-'+id"></div> 简写: <div :id="'id-'+id"></div> 3.绑定表达式 放在Mustache标签内的文本内容。除了直接输出属性值之外,一段绑定表达式可以由一个简单的JavaScript表达式和可选的一个或多个过滤器构成(不支持正则表达式,若需要复杂的转换,则使用过滤器或者计算属性来进行处理)。 {{ index + 1}} {{ index == 0 ? 'a' : 'b' }} {{name.split('').join('|') }} {{ var a = 1 }} //无效 4.过滤器 vue.js允许在表达式后添加可选的过滤器,以管道符"|"指示。 {{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。 {{ name | filterA | filterB }} //多个过滤器链式使用 {{ name | filterA arg1 arg2 }} //传入多个参数 filterA将name的值做为第一个参数,arg1,arg2做为第二、第三个参数传入过滤器函数中。 最终函数的返回值即为输出结果。arg1,arg2可以使用表达式,也可以加上单引号,直接传入字符串。 例如: {{ name.split('') | limitBy 3 1 }} // ->u,e 过滤器limitBy可以接受两个参数,第一个参数是设置显示个数,第二个参数为可选,指从开始元素的数组下标。 vue.js内置的10个过滤器(Vue.js2.0中去除) capitalize:字符串首字符转化为大写。 uppercase:字符串转化为大写。 lowercase:字符串转化为小写。 currency:参数为{String}[货币符号],{Number}[小数位],将数字转化成货币符号,并且会自动添加数字分节号。 {{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00 pluralize:参数为{String}single,[double,triple],字符串复数化。 <p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p> 输出结果: 1item 1st 2items 2nd 3items 3rd 4items 4th json:参数为{Number}[indent]空格缩进数,将json对象数据输出成符合json格式的字符串。 debounce:传入值必须是函数,参数可选,为{Number}[wait],即延时时长。作用是当调用函数n毫秒后,才会执行该动作。 <input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发 limitBy:传入值必须是数组,参数为{Number}limit,{Number}[offset],limit为显示个数,offset为开始显示数组下标。 <div v-for="item in items | limitBy 10"></div> //items为数组,且只显示数组中的前十个元素 filterBy:传入值必须是数组,参数为{String | Function}targetStringOrFunction,即需要匹配的字符串或函数;"in"可选分隔符。{String}[...searchKeys],为检索的属性区域。 <p v-for="name in names | filterBy '1.0'">{{ name }}</p> //检索names数组中值包含1.0的元素 <p v-for="item in items | filterBy '1.0' in 'name'">{{ item | json }}</p> //检索items中元素属性name值为1.0的元素输出。检索区域也可以为数组,即in [name,version],在多个属性中进行检索。 输出结果 vue1.0 {"name":"vue1.0","version":"1.0"} 使用自定义的过滤函数,函数可以在选项methods中定义 <p v-for="item in items | filterBy customFilter" methods:{ cuestomFilter:function(item){ if(item.name) return true; //检索所有元素中包含name属性的元素 }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 } orderBy:传入值必须是数组,参数为{String|Array|Function}sortKeys,即指定排序的策略。 单个键名: <p v-for="item in items | orderBy 'name' -1">{{ item.name}}</p> //items数组中以键名name进行降序排列 多个键名: <p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序 自定义排序函数: <p v-for="item in items | orderBy customOrder">{{item.name}}</p> methods:{ customOrder: function(a,b){ return parseFloat(a.version) > parseFloat(b.version) //对比item中version的值的大小进行排序 }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 } 5.指令 指令的值限定为绑定表达式,即当表达式的值发生改变时,会有些特殊行为作用到绑定的DOM上。 参数:src为参数 <img v-bind:src="avatar" /> <==> <img src="{{avatar}}" /> 修饰符:以半角句号.开始的特殊后缀,用于表示指令应该以特殊方式绑定。 计算属性 避免在模板中加入过重的业务逻辑,保证模版的结构清晰和可维护性。 1.基础例子 var vm = new Vue({ el: '#app', data: { firstName:'Gavin', lastName:'CLY' },/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 computed: { fullName:function(){ //this指向vm实例 return this.firstName + ' ' + this.lastName; }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 } }) <p>{{ firstName }}</p> //Gavin <p>{{ lastName }}</p> //CLY <p>{{ fullName }}</p> //Gavin CLY 注:此时对vm.firstName和vm.lastName进行修改,始终会影响vm.fullName。 2.Setter 更新属性时带来便利 var vm = new Vue({ el:'#el', data:{ cents:100 }, computed:{ price:{ set:function(newValue) { this.cents = newValue * 100; }, get:function(){ return (this.cents / 100).toFixed(2); }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 } } }) 表单控件 v-model:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。 var vm = new Vue({ el:'#app', data: { message: '', gender: '', cheched: '', multiChecked: '', a: 'checked', b: 'checked' }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 }) 1. Text 输入框示例,用户输入的内容和vm.message直接绑定: <input type="text" v-model="message" /> <span>Your input is : {{ message }} </span> 2. Radio 单选框示例: <label><input type="radio" value="male" v-model="gender">男</lable> <label><input type="radio" value="famale" v-model="gender">女</lable> <p>{{ gender }}</p> //显示的是value值 3.Checkbox 单个勾选框,v-model即为布尔值,此时Input的value并不影响v-model的值。 <input type="checkbox" v-model="checked" /> <span>checked: {{ checked }} </span> //显示的是true/false 多个勾选框,v-model使用相同的属性名称,且属性为数组。 <label><input type="checkbox" value="1" v-model="multiChecked">1</label> <label><input type="checkbox" value="1" v-model="multiChecked">2</label> <label><input type="checkbox" value="1" v-model="multiChecked">3</label> <p>MultiChecked:{{ multiChecked.join{'|'} }}</p> //multiChecked:1|2 4.Select 单选 <select v-model="selected"> <option selected>A</option> <option>B</option> <option>C</option> </select>/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 <span>Selected: {{ selected }}</span> 多选 <select v-model="multiSelected" multiple> <option selected>A</option> <option>B</option> <option>C</option> </select>/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 <span>MultiSelected: {{ multiSelected.join('|') }}</span> 5.绑定value 通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。 Checkbox <input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value=" 选中: vm.checked == vm.a //=> true 未选中: vm.checked == vm.b //=>true Radio <input type="radio" v-model="checked" v-bind:value="a" > 选中: vm.checked == vm.a //=> true 3.Select Options <select v-model="selected"> <!-- 对象字面量 --> <option v-bind:value="{ number:123}">123</option> </select>//欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 选中: typeof vm.selected //=> object vm.selected.number //=> 123 6.参数特性 .lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。 <!-- 在 "change" 而不是 "input" 事件中更新 --> <input v-model.lazy="msg" > .number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。 <input v-model.number="age" type="number"> .trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入 <input v-model.trim="msg"> Class与Style绑定 1.Class绑定 对象语法:v-bind:class接受参数是一个对象,而且可以与普通的class属性共存。 <div class="tab" v-bind:class="{'active':active,'unactive':!active}"></div> vm实例中需要包含: data:{ active:true }//欢迎加入全栈开发交流圈一起学习交流:864305860 渲染结果为: <div class="tab active"></div> 数组语法:v-bind:class也接受数组作为参数。 <div v-bind:class="[classA,classB]"></div> vm实例中需要包括: data:{ classA:"class-a", classB:"class-b" }//欢迎加入全栈开发交流圈一起学习交流:864305860 渲染结果为: <div class="class-a class-b"></div> 使用三元表达式切换数组中的class <div v-bind:class="[classA,isB?classB:""]"></div> 若 vm.isB = false 则渲染结果为 <div class="class-a"></div> 2.内联样式绑定(style属性绑定) 对象语法:直接绑定符合样式格式的对象。 <div v-bind:style="alertStyle"></div> vm实例中包含: data:{ alertStyle:{ color: 'red', fontSize: '2px' }//欢迎加入全栈开发交流圈一起学习交流:864305860 } <div v-bind:style="{fontSize:alertStyle.fontSize,color:'red'}"></div> 数组语法:v-bind:style允许将多个样式对象绑定到同一元素上。 <div v-bind:style="[ styleObjectA,styleObjectB]" .></div> 3.自动添加前缀 在使用transform这类属性时,v-bind:style会根据需要自动添加厂商前缀。:style在运行时进行前缀探测,如果浏览器版本本省就不支持不加前缀的css属性,那就不会添加。 结语 感谢您的观看,如有不足之处,欢迎批评指正。

优秀的个人博客,低调大师

Python字符串常用操作方法

去除字符串的两段空白 string.strip() #去除两边 string.rstrip() #去除左边空格 string.lstrip() #去除右边空格 大小写转换 string.upper() #全部大写 string.lower() #全部小写 string.title() #首字母大写,用户规范输出 上面这几个方法都只是暂时改变的展现形式,不该百年原字符串的值,若要改变原字符串的值要重新复制 newstring=string.strip() #实际上这里只是新的变量指向了新的地址,原来的字符串的值还是没有改变,但是我们不适用它了

优秀的个人博客,低调大师

Java各种常用时间操作方法

import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class TimeTest { private int weeks = 0; private int MaxDate;// 一月最大天数 private int MaxYear;// 一年最大天数 public static String getTwoDay(String sj1, String sj2) { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); long day = 0; try { java.util.Date date = myFormatter.parse(sj1); java.util.Date mydate = myFormatter.parse(sj2); day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); } catch (Exception e) { return ""; } return day + ""; } public static String getWeek(String sdate) { // 再转换为时间 Date date = TimeTest.strToDate(sdate); Calendar c = Calendar.getInstance(); c.setTime(date); // int hour=c.get(Calendar.DAY_OF_WEEK); // hour中存的就是星期几了,其范围 1~7 // 1=星期日 7=星期六,其他类推 return new SimpleDateFormat("EEEE").format(c.getTime()); } public static Date strToDate(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } public static long getDays(String date1, String date2) { if (date1 == null || date1.equals("")) return 0; if (date2 == null || date2.equals("")) return 0; // 转换为标准时间 SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = null; java.util.Date mydate = null; try { date = myFormatter.parse(date1); mydate = myFormatter.parse(date2); } catch (Exception e) { } long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); return day; } // 计算当月最后一天,返回字符串 public String getDefaultDay() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天 str = sdf.format(lastDate.getTime()); return str; } // 上月第一天 public String getPreviousMonthFirst() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 lastDate.add(Calendar.MONTH, -1);// 减一个月,变为下月的1号 // lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天 str = sdf.format(lastDate.getTime()); return str; } // 获取当月第一天 public String getFirstDayOfMonth() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 str = sdf.format(lastDate.getTime()); return str; } // 获得本周星期日的日期 public String getCurrentWeekday() { weeks = 0; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 6); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } // 获取当天时间 public String getNowTime(String dateformat) { Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 可以方便地修改日期格式 String hehe = dateFormat.format(now); return hehe; } // 获得当前日期与本周日相差的天数 private int getMondayPlus() { Calendar cd = Calendar.getInstance(); // 获得今天是一周的第几天,星期日是第一天,星期二是第二天...... int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1 if (dayOfWeek == 1) { return 0; } else { return 1 - dayOfWeek; } } // 获得本周一的日期 public String getMondayOFWeek() { weeks = 0; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } // 获得相应周的周六的日期 public String getSaturday() { int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } // 获得上周星期日的日期 public String getPreviousWeekSunday() { weeks = 0; weeks--; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } // 获得上周星期一的日期 public String getPreviousWeekday() { weeks--; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } // 获得下周星期一的日期 public String getNextMonday() { weeks++; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } // 获得下周星期日的日期 public String getNextSunday() { int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } private int getMonthPlus() { Calendar cd = Calendar.getInstance(); int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH); cd.set(Calendar.DATE, 1);// 把日期设置为当月第一天 cd.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 MaxDate = cd.get(Calendar.DATE); if (monthOfNumber == 1) { return -MaxDate; } else { return 1 - monthOfNumber; } } // 获得上月最后一天的日期 public String getPreviousMonthEnd() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.MONTH, -1);// 减一个月 lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天 lastDate.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天 str = sdf.format(lastDate.getTime()); return str; } // 获得下个月第一天的日期 public String getNextMonthFirst() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.MONTH, 1);// 减一个月 lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天 str = sdf.format(lastDate.getTime()); return str; } // 获得下个月最后一天的日期 public String getNextMonthEnd() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.MONTH, 1);// 加一个月 lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天 lastDate.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天 str = sdf.format(lastDate.getTime()); return str; } // 获得明年最后一天的日期 public String getNextYearEnd() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.YEAR, 1);// 加一个年 lastDate.set(Calendar.DAY_OF_YEAR, 1); lastDate.roll(Calendar.DAY_OF_YEAR, -1); str = sdf.format(lastDate.getTime()); return str; } // 获得明年第一天的日期 public String getNextYearFirst() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.YEAR, 1);// 加一个年 lastDate.set(Calendar.DAY_OF_YEAR, 1); str = sdf.format(lastDate.getTime()); return str; } // 获得本年有多少天 private int getMaxYear() { Calendar cd = Calendar.getInstance(); cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天 cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。 int MaxYear = cd.get(Calendar.DAY_OF_YEAR); return MaxYear; } private int getYearPlus() { Calendar cd = Calendar.getInstance(); int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天 cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天 cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。 int MaxYear = cd.get(Calendar.DAY_OF_YEAR); if (yearOfNumber == 1) { return -MaxYear; } else { return 1 - yearOfNumber; } } // 获得本年第一天的日期 public String getCurrentYearFirst() { int yearPlus = this.getYearPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, yearPlus); Date yearDay = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preYearDay = df.format(yearDay); return preYearDay; } // 获得本年最后一天的日期 * public String getCurrentYearEnd() { Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); return years + "-12-31"; } // 获得上年第一天的日期 * public String getPreviousYearFirst() { Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); int years_value = Integer.parseInt(years); years_value--; return years_value + "-1-1"; } // 获得上年最后一天的日期 public String getPreviousYearEnd() { weeks--; int yearPlus = this.getYearPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, yearPlus + MaxYear * weeks + (MaxYear - 1)); Date yearDay = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preYearDay = df.format(yearDay); getThisSeasonTime(11); return preYearDay; } // 获得本季度 public String getThisSeasonTime(int month) { int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }; int season = 1; if (month >= 1 && month <= 3) { season = 1; } if (month >= 4 && month <= 6) { season = 2; } if (month >= 7 && month <= 9) { season = 3; } if (month >= 10 && month <= 12) { season = 4; } int start_month = array[season - 1][0]; int end_month = array[season - 1][2]; Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); int years_value = Integer.parseInt(years); int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month); int end_days = getLastDayOfMonth(years_value, end_month); String seasonDate = years_value + "-" + start_month + "-" + start_days + ";" + years_value + "-" + end_month + "-" + end_days; return seasonDate; } private int getLastDayOfMonth(int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } if (month == 2) { if (isLeapYear(year)) { return 29; } else { return 28; } } return 0; } public boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } //上个月的今天 public static String getNowOfLastMonth() { SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); GregorianCalendar aGregorianCalendar = new GregorianCalendar(); aGregorianCalendar.set(Calendar.MONTH, aGregorianCalendar .get(Calendar.MONTH) - 1); String nowOfLastMonth = aSimpleDateFormat .format(aGregorianCalendar.getTime()); return nowOfLastMonth; } //去年的今天 public static String getNowOfLastYear() { SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); GregorianCalendar aGregorianCalendar = new GregorianCalendar(); aGregorianCalendar.set(Calendar.YEAR, aGregorianCalendar .get(Calendar.YEAR) - 1); String currentYearAndMonth = aSimpleDateFormat .format(aGregorianCalendar.getTime()); return currentYearAndMonth; } public static void main(String[] args) { TimeTest tt = new TimeTest(); System.out.println("获取当天日期:" + tt.getNowTime("yyyy-MM-dd")); System.out.println("获取本周一日期:" + tt.getMondayOFWeek()); System.out.println("获取本周日的日期~:" + tt.getCurrentWeekday()); System.out.println("获取上周一日期:" + tt.getPreviousWeekday()); System.out.println("获取上周日日期:" + tt.getPreviousWeekSunday()); System.out.println("获取下周一日期:" + tt.getNextMonday()); System.out.println("获取下周日日期:" + tt.getNextSunday()); System.out.println("获得相应周的周六的日期:" + tt.getNowTime("yyyy-MM-dd")); System.out.println("获取本月第一天日期:" + tt.getFirstDayOfMonth()); System.out.println("获取本月最后一天日期:" + tt.getDefaultDay()); System.out.println("获取上月第一天日期:" + tt.getPreviousMonthFirst()); System.out.println("获取上月最后一天的日期:" + tt.getPreviousMonthEnd()); System.out.println("获取下月第一天日期:" + tt.getNextMonthFirst()); System.out.println("获取下月最后一天日期:" + tt.getNextMonthEnd()); System.out.println("获取本年的第一天日期:" + tt.getCurrentYearFirst()); System.out.println("获取本年最后一天日期:" + tt.getCurrentYearEnd()); System.out.println("获取去年的第一天日期:" + tt.getPreviousYearFirst()); System.out.println("获取去年的最后一天日期:" + tt.getPreviousYearEnd()); System.out.println("获取明年第一天日期:" + tt.getNextYearFirst()); System.out.println("获取明年最后一天日期:" + tt.getNextYearEnd()); System.out.println("获取本季度第一天到最后一天:" + tt.getThisSeasonTime(11)); System.out.println("获取两个日期之间间隔天数2012-04-26~2012 -04-30:" + TimeTest.getTwoDay("2012-04-26 ", "2012 -04-30 ")); } }

优秀的个人博客,低调大师

LinkedBlockingQueue阻塞队列offer()操作抛出中断异常

说明 在使用LinkedBlockingQueue的offer方法时,出现了中断异常,现分析一下出现这个中断异常的原因。 会产生中断异常的Demo import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class TestLinkedBlockingQueue { public static void main(String[] args) { LinkedBlockingQueue lbq = new LinkedBlockingQueue(3); for(int i = 0; i < 10; i++){ try { System.out.println(lbq); //这里用offer方法往阻塞队列里面添加对象,此方法表示若队列满了,则等待1秒,1秒后若队列还是满的,则丢弃数据。 lbq.offer(i, 1000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Thread.currentThread().interrupt();//如果注释掉这行代码,则此程序不会抛出异常 } } } LinkedBlockingQueue的offer源码方法 public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException { if (e == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); int c = -1; final ReentrantLock putLock = this.putLock; final AtomicInteger count = this.count; putLock.lockInterruptibly(); try { while (count.get() == capacity) { if (nanos <= 0) return false; nanos = notFull.awaitNanos(nanos); } enqueue(new Node<E>(e)); c = count.getAndIncrement(); if (c + 1 < capacity) notFull.signal(); } finally { putLock.unlock(); } if (c == 0) signalNotEmpty(); return true; } //lockInterruptibly方法 public void lockInterruptibly() throws InterruptedException { sync.acquireInterruptibly(1); } //acquireInterruptibly方法 public final void acquireInterruptibly(int arg) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (!tryAcquire(arg)) doAcquireInterruptibly(arg); } 所以,当线程被标记有中断标志时,offer添加时将获取不到锁,直接抛出中断异常。

优秀的个人博客,低调大师

搜集的各种c#数组的操作

int[] A = new[] { 1, 2, 3, 4, 5 };int[] B = new[] { 2, 4, 9, 10 }; //交集 int[] C = A.Intersect(B).ToArray(); //差集 int [] D=A.Except(B)).ToArray(); //并集 int [] E =A.Union(B).).ToArray(); 例子: int[] id1 = { 44, 26, 92, 30, 71, 38 }; int[] id2 = { 39, 59, 83, 47, 26, 4, 30 }; IEnumerable<int> both = id1.Intersect(id2); foreach (int id in both) Console.WriteLine(id); /* This code produces the following output: 26 30 */ Product[] fruits1 = { new Product { Name = "apple", Code = 9 }, new Product { Name = "orange", Code = 4 }, new Product { Name = "lemon", Code = 12 } }; Product[] fruits2 = { new Product { Name = "apple", Code = 9 } }; //Get all the elements from the first array //except for the elements from the second array. IEnumerable<Product> except = fruits1.Except(fruits2, new ProductComparer()); foreach (var product in except) Console.WriteLine(product.Name + " " + product.Code); /* This code produces the following output: orange 4 lemon 12 */ int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 }; int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 }; IEnumerable<int> union = ints1.Union(ints2); foreach (int num in union) { Console.Write("{0} ", num); } /* This code produces the following output: 5 3 9 7 8 6 4 1 0 */

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册