Calendar

  • 获取当前时间
  • SimpleDateFormat
  • 获取年月日等
  • 设置特定时间、时区
  • 日期的计算(加减)
  • 计算日期差
  • 计算某月有几天
  • Calendar常用方法合集
  • 夏令时是什么

简介:
Java中,Calendar是一个抽象类,所以这个类是不能通过new来直接实现的,并且调用getInstance后y一般返回的是Calendar的子类:GregorianCalendar。

附getInstance中private static Calendar createCalendar(TimeZone zone,Locale aLocale)部分代码

        if (cal == null) {//  如果没有明确指定已知的日历类型,则执行传统方式来创建日历:为 th_TH 语言环境创建一个佛教日历,
//为 ja_JP_JP 语言环境创建一个 JapaneseImperialCalendar,
//或者为任何其他语言环境创建一个 GregorianCalendar。if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {cal = new BuddhistCalendar(zone, aLocale);} else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"&& aLocale.getCountry() == "JP") {cal = new JapaneseImperialCalendar(zone, aLocale);} else {cal = new GregorianCalendar(zone, aLocale);}}return cal;

获取当前时间

 Calendar calendar=Calendar.getInstance();calendar.getTime();//只有使用了getTime方法,返回的是Date对象//也可以使用calendar.setTime(new Date());

调用抽象类中的静态方法getInstance来返回一个当前的calendar对象。Calendar对象较大较复杂,所以使用的是单例模式,使用单例模式的好处是每次都返回同一个对象,这样保证了每次返回都是同一个对象

源码

    /**使用默认时区和区域设置获取日历。 返回的Calendar基于默认时区中的当前时间和默认FORMAT语言环境。
返回:Calendar* {@link Locale.Category#FORMAT FORMAT} locale.** @return a Calendar.*/public static Calendar getInstance(){return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));}

如何规范输出日期的格式

     Date date=c.getTime();//返回的是Date对象SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd分hh时ss分mm秒");   //注意这里是hh,十二小时制,HH是24小时制String strTime=sdf2.format(date);System.out.println(strTime);

yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区

解析Calendar生成方式:通过时区(TimeZone)和区域(Local)来生成时间,因为不同时区有时间差。并且Calendar对象是可变的,可以通过设置时区、区域、年月日来改变Calendar对象中存储的值。
举例:跨国业务中,美国的消费者下单时间和服务器中接收到订单的时间不一样,这里就需要使用到时区和地区的知识(想知道怎么做继续往下看)

获取年月日

     Calendar calendar=Calendar.getInstance();calendar.getTime();//只有使用了getTime方法,calendar才会有存储的日期System.out.println("年:"+calendar.get(calendar.YEAR));System.out.println("一个月的第几周:"+calendar.get(calendar.WEEK_OF_MONTH));System.out.println("一周的第几天:"+calendar.get(calendar.DAY_OF_WEEK));System.out.println("早为0,晚为1(以中午12点为界限):"+calendar.get(Calendar.AM_PM));System.out.println("一天的第几个小时:"+calendar.get(Calendar.HOUR_OF_DAY));System.out.println("秒:"+calendar.get(Calendar.SECOND));System.out.println("注意:周日是第一天,序号为1:"+calendar.get(Calendar.SUNDAY));
field 说明
public final static int ERA = 0; 公元前BC(0) 公元后(1)
public final static int YEAR = 1;
public final static int MONTH = 2; 日期
public final static int WEEK_OF_YEAR = 3; 一年的第几周
public final static int WEEK_OF_MONTH = 4; 一个月的第几周
public final static int DATE = 5; 一个月的第几天
public final static int DAY_OF_MONTH = 6; 一个月的第几天
public final static int DAY_OF_WEEK = 7; 一周的第几天
public final static int AM_PM = 9; 特别注意:1是日 早上or下午AM:0 PM:1,以中午十二点为界
public final static int HOUR = 10; 小时
public final static int HOUR_OF_DAY = 11; 一天的第几个小时
public final static int MINUTE = 12; 分钟
public final static int SECOND = 13;
public final static int MILLISECOND = 14; 毫秒
public final static int ZONE_OFFSET = 15; 指示与 GMT 的原始偏移量(以毫秒为单位)
public final static int DST_OFFSET = 16; 指示以毫秒为单位的夏令时偏移量
public final static int FIELD_COUNT = 17; 字段数量

设置特定时间、时区

     Calendar calendar=Calendar.getInstance();calendar.getTime();//只有使用了getTime方法,calendar才会有存储的日期calendar.set(Calendar.YEAR,2022);calendar.set(Calendar.MONTH,5);calendar.set(Calendar.DAY_OF_MONTH,2);System.out.println(calendar.getTime());calendar.set(1990,3,5);//这里是四月嗷System.out.println(calendar.getTime());//结果//Thu Jun 02 23:32:48 CST 2022//Thu Apr 05 23:32:48 CST 1990

时区有哪些

        for (String timezone: TimeZone.getAvailableIDs()) {System.out.println(timezone);}//很多,大家运行一下就知道了

点击跳转至:世界时区

时区有什么用:不同时区的时间不一样,假如平台有海外业务,如果在存入数据库的时候没有考虑时区问题,即数据库只保存年月日,那么可能会发生2021.10.1 18:00:00服务器接收到了订单,并且立刻数据库中存入一笔时间2021.10.1 19:00:00的订单记录,这里订单时间相当于变成"一小时后的下单记录时间",所以我们要考虑转换时区来保证数据库时间存储的正确性。(虽然可以在数据库中加入timezone这个字段,但是可能会麻烦一些)

不同时区的时间转换

 public class TimeZoneTransform {private static String dateTransformBetweenTimeZone(Date sourceDate, DateFormat formatter,TimeZone sourceTimeZone, TimeZone targetTimeZone) {Long targetTime = sourceDate.getTime() - sourceTimeZone.getRawOffset() + targetTimeZone.getRawOffset();return getTime(new Date(targetTime), formatter);}private static String getTime(Date date, DateFormat formatter) {return formatter.format(date);}private static String getTimeZone() {Calendar cal = Calendar.getInstance();// getOffset will access to offset and contains DaylightTimeint timeZone = cal.getTimeZone().getOffset(System.currentTimeMillis()) / (3600000);if (timeZone >= 0) {return String.valueOf("+" + timeZone);}return String.valueOf(timeZone);}public static String getGMTTime(Date date, SimpleDateFormat formatter) {TimeZone srcTimeZone = TimeZone.getTimeZone("GMT" + getTimeZone());TimeZone destTimeZone = TimeZone.getTimeZone("GMT+8");return dateTransformBetweenTimeZone(date, formatter, srcTimeZone, destTimeZone);}public static void main(String[] args) {System.out.println(getGMTTime(new Date(System.currentTimeMillis()), new SimpleDateFormat()));}
}

Set有延迟性
set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段 f 是立即更改的,但是直到下次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。
通俗的来说就是

    public void set(int field, int value){//areFieldsSet:如果与当前设置的时间同步,则为真。如果为 false,则下一次获取字段值的尝试将强制从当前值重新计算所有字段if (areFieldsSet && !areAllFieldsSet) {computeFields();}internalSet(field, value);//这里的操作仅仅只是更改存储的值,但是无法判断某些不合法的值,如11月没有31号isTimeSet = false;areFieldsSet = false;isSet[field] = true;stamp[field] = nextStamp++;if (nextStamp == Integer.MAX_VALUE) {adjustStamp();}}

看到这里可能你会很懵,不知道它的延迟性可能会引发什么情况,下面来说一个情况,首先你给calendar设置了9月31号(不报错并且会存储,当调用上述几种方法后会计算然后变成十月一日),此时假如调用了上述几种方法后,设置为五日,就变成了十月五日;假如没调用那几种方法,再设置五日,就是九月五日。
简要来说:假如你阴差阳错把天数设置超过范围,并且你设置的月份是你认为正确的,此时假如你调用了get等方法,那么calendar会把日期计算成一个系统认为合法的日期(月份和天数可能都不是你想要的)。此时如果你只修改了日期,那么你月份仍然是错误的。

        cal.setLenient(true);cal.set(2021,8,31);//这里是9月嗷
//        System.out.println(cal.getTime());//调用此部分就刷新了数据
//        cal.set(Calendar.MONTH,9);cal.set(Calendar.DATE,10);System.out.println(cal.getTime());//假如注释那两行,结果Fri Sep 10 19:56:31 GMT+08:00 2021//假如不注释,结果:Sun Oct 10 19:57:13 GMT+08:00 2021

日期的计算(加减)

        Calendar calendar=Calendar.getInstance();calendar.setTime(new Date());//日期的加减calendar.add(Calendar.YEAR,10);calendar.add(Calendar.MONTH,-2);//可以为负数的嗷,其他的字段就不展示了

其他的字段操作自己探索就好了

计算日期差

//计算相隔天数的方法public int getDaysBetween (Calendar d1, Calendar d2){if (d1.after(d2)){  // swap dates so that d1 is start and d2 is endjava.util.Calendar swap = d1;d1 = d2;d2 = swap;}int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);int y2 = d2.get(Calendar.YEAR);if (d1.get(Calendar.YEAR) != y2){d1 = (Calendar) d1.clone();do{days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数d1.add(Calendar.YEAR, 1);} while (d1.get(Calendar.YEAR) != y2);}return days;}

这里有个大佬讲的很全

获取某年二月有几天

虽然获取某年二月有几天很容易,但是这里仅是提供一个思路

       calendar.set(Calendar.YEAR,2021);calendar.set(Calendar.MONTH,1);System.out.println(calendar.getTime());System.out.println(calendar.getActualMaximum(Calendar.DATE));//输出28

下面来解释getActualMaximum方法:返回当前日期时,该字段的最大值
还有另一个长得很像的方法getMaximum:用于获取此Calendar的给定字段的最大值,例如使用getMaximum(Calendar.DATE),那么返回的是31,因为十二个月中DATE最大是31

常见方法

上面涉及到的不在写了

abstract void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
boolean after(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。
boolean before(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。
void clear() 将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
void clear(int field) 将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
int compareTo(Calendar anotherCalendar) 比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
protected void complete() 填充日历字段中所有未设置的字段。
boolean equals(Object obj) 将此 Calendar 与指定 Object 比较。
int get(int field) 返回给定日历字段的值。
int getActualMaximum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。
int getActualMinimum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值
static Locale[] getAvailableLocales() 返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。
int getFirstDayOfWeek() 获取一星期的第一天
Date getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
long getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位。
boolean isLenient() 判断日期/时间的解释是否为宽松的。
boolean isSet(int field) 确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。
abstract void roll(int field, boolean up) 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
void roll(int field, int amount) 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。
void setFirstDayOfWeek(int value) 设置一星期的第一天是哪一天
void setLenient(boolean lenient) 指定日期/时间解释是否是宽松的。
void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。
void setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值。
void setTimeZone(TimeZone value) 使用给定的时区值来设置时区。

宽松模式:是否允许字段的值超过范围,即设置HOUR=25就是明天的1点
注意:当 Calendar 处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。

        calendar.setLenient(true);calendar.set(Calendar.YEAR,2021);calendar.set(Calendar.MONTH,13);System.out.println(calendar.getTime());//结果:Sat Feb 05 01:14:31 CST 2022

roll和add的区别:
2021.9.12对MONTH字段-10,会是roll:2021.10.12,
add:2020.10.12
roll:对字段MONTH回滚时,只回滚该字段,不更改其更大的字段。
add:对字段MONTH回滚时,超出范围时,会更新其更大的字段

在宽松模式下也可以通过add方法来计算两个日期之间的时间差

什么是夏令时

什么是夏令时?

通俗简单的讲:在夏天日光充裕的时候,人们为了充分利用日光时间人为的将时钟拨快了一个小时。
出发点和目的都很简单:夏天亮的早,白天时间长,调整为夏令时促使人们早睡早起,以充分利用光照资源,从而节约照明用电。
例如:晚上两点的时候,时间调到三点,那么这天你会少睡一小时,这样到了晚上,那么你会提前一小时睡觉,那么就省了电。
有关Calendar的夏令时部分请看这位大佬的博客
添加链接描述


下面是踩坑:

  • 在格式化日期时,没有注意HH和hh的区别,hh是十二小时制度

关于日期的各种常用方法
获取String类型的日期

    public static String getStringDate(){Date date=new Date();DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");return df.format(date);}

由String类型日期计算当前月的第几周

    public static int getWeekOnMonth(String date) throws ParseException {Date date1=stringToDate(date);Calendar calendar=Calendar.getInstance();calendar.setTime(date1);return Calendar.WEEK_OF_MONTH;}

由String转换成Date

    public static Date stringToDate(String date) throws ParseException {DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");return df.parse(date);}

···附赠代码
…这里的代码是用来测试一个日期,求该日期所在周的起始时间(周一零点)和结束时间(不涉及月份的改变,即若十月二日是周三,那么周一是在上个月,但是这里我们认为十月一日是当前周的起始时间,同理,周末结束时间的月份也不会改变)

package Interface;import javax.print.attribute.standard.DateTimeAtCompleted;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;public class Test {public static void main(String[] args) throws ParseException {getWeekOnMonth("2020-09-16 00:33:21");String date="2020-09-16 00:33:21";System.out.println("测试得到月开始时间:"+getInitMonth("2020-09-16 00:33:21"));System.out.println("测试得到月结束时间:"+getEndMonth("2020-09-16 00:33:21"));System.out.println("测试获取当前时间:"+getStringDate());System.out.println("测试calendar转换string:"+calendarToString(Calendar.getInstance()));System.out.println("测试获取年初时间:"+getInitYear(date));System.out.println("测试获取年末时间:"+getEndYear(date));System.out.println("测试获得月天数:"+getMaxDayOfMonth(date));}public static String getStringDate(){Date date=new Date();DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(date);}public static String calendarToString(Calendar calendar){Date date=calendar.getTime();DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(date).toString();}public static int getWeekOnMonth(String date) throws ParseException {Date date1=stringToDate(date);Calendar calendar=Calendar.getInstance();calendar.setTime(date1);return 0;}public static Date stringToDate(String date) throws ParseException {DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.parse(date);}public static String getInitWeek(String date) throws ParseException {Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(date));//如果是这个月的第一周,那么初始日期就是一号if (calendar.get(Calendar.WEEK_OF_MONTH)==1)calendar.set(Calendar.DAY_OF_MONTH,1);elsecalendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);calendar.set(Calendar.HOUR_OF_DAY,0);calendar.set(Calendar.MINUTE,0);calendar.set(Calendar.SECOND,0);DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date1=calendar.getTime();System.out.println(calendar.get(Calendar.HOUR_OF_DAY));return df.format(date1);}public static String getEndWeek(String date) throws ParseException{String initDate=getInitWeek(date);DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(initDate));calendar.getActualMaximum(Calendar.MONTH);//获取最大天数int maxDay=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);int nowDay=calendar.get(Calendar.DAY_OF_MONTH);int endDay;if (nowDay+6>maxDay){endDay=maxDay;calendar.set(Calendar.DAY_OF_MONTH,endDay);}else {//获取当前是周几,然后加天数即可int weekday=calendar.get(Calendar.DAY_OF_WEEK);int add=0;if (weekday==1)add=0;if (weekday==2)add=6;if (weekday==3)add=5;if (weekday==4)add=4;if (weekday==5)add=3;if (weekday==6)add=2;if (weekday==7)add=1;calendar.add(Calendar.DAY_OF_MONTH,add);}calendar.set(Calendar.HOUR_OF_DAY,23);calendar.set(Calendar.MINUTE,59);calendar.set(Calendar.SECOND,59);Date date1=calendar.getTime();return df.format(date1);}public static String getEndMonth(String date) throws ParseException {Calendar calendar=Calendar.getInstance();//获得Date形式的日期,因为获取每个月的开始和起始时间不会涉及月份的改变,所以直接调用stringToDate即可calendar.setTime(stringToDate(date));int maxDay=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);calendar.set(Calendar.DAY_OF_MONTH,maxDay);calendar.set(Calendar.HOUR_OF_DAY,23);calendar.set(Calendar.MINUTE,59);calendar.set(Calendar.SECOND,59);Date date1=calendar.getTime();DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(date1);}public static String getInitYear(String date) throws ParseException {Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(date));calendar.set(Calendar.DAY_OF_YEAR,1);calendar.set(Calendar.HOUR_OF_DAY,0);calendar.set(Calendar.MINUTE,0);calendar.set(Calendar.SECOND,0);DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date1=calendar.getTime();return df.format(date1);}public static String getEndYear(String date) throws ParseException {Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(date));int maxDay=calendar.getActualMaximum(Calendar.DAY_OF_YEAR);calendar.set(Calendar.DAY_OF_YEAR,maxDay);calendar.set(Calendar.HOUR_OF_DAY,23);calendar.set(Calendar.MINUTE,59);calendar.set(Calendar.SECOND,59);DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date1=calendar.getTime();return df.format(date1);}public static String getInitMonth(String date) throws ParseException {Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(date));calendar.set(Calendar.DAY_OF_MONTH,1);calendar.set(Calendar.HOUR_OF_DAY,0);calendar.set(Calendar.MINUTE,0);calendar.set(Calendar.SECOND,0);Date date1=calendar.getTime();DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(date1);}public static int getMaxDayOfMonth(String date) throws ParseException {//先转换成calendar然后获取最大天数Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(date));return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);}//获取本月一共有几天public static int getMaxWeekOfMonth(String date) throws ParseException {Calendar calendar=Calendar.getInstance();calendar.setTime(stringToDate(date));return calendar.getActualMaximum(Calendar.WEEK_OF_MONTH);}}

Calendar日历类详解【SimpleDateFormat、时区、Date、夏令时、常用方法,日期差、获取当前时间】相关推荐

  1. Java 时间, 日历类详解

    1. Java时间戳 在最早出现的 UNIX 操作系统考虑到计算机产生的年代和应用的时限,把1970年1月1日0点定义为时间纪元,这种定义时间的方式在计算机语言中广泛存在,Java就是其中之一.之所以 ...

  2. linux中date命令详解,Linux使用date命令修改日期时间详解linux操作系统 -电脑资料...

    在linux中我们只要使用ROOT管理员进入然后就可以直接使用date函数来修改服务器的日期时间了,如date -s 2013-08-03就设置成功了,下面我来来看看date用法 Linux 时间修改 ...

  3. Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类

    时间处理相关类 用long类型的变量来表示时间,获得现在时刻的"时刻数值":long now = System.currentTimeMillis(); Date时间类(java. ...

  4. Java Calendar 日历类的时间操作 Timestamp Date Calendar 相互转换

    Java Calendar 日历类的时间操作,这也许是 Java 环境下创建和管理日历及操作时间最简单的一个方案了,示范代码也很简单. 演示了获取时间,日期时间的累加和累减,以及日期时间的比较. 原文 ...

  5. 【Java基础系列教程】第十四章 Java 包装类、日期与日期格式化类、数值格式化等常用类详解

    一.包装类 1.1 什么是包装类 Java中的数据类型分为基本数据类型和引用数据类型,其中基本数据类型是不具有对象特征的,也就是说它们不能像对象一样拥有属性和方法,以及对象化交互.           ...

  6. EXT核心API详解(二)-Array/Date/Function/Number/String

    EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o )  Number object是否在数组中,找不到返 ...

  7. 【Java Calendar日历类】可视化日历程序(控制台输出)

    Calendar日历类 Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年.月.日.时.分.秒的展示和计算. GregorianCalendar 是 Calendar 的一 ...

  8. java的日历类_java 中的Calendar日历类

    一.java 中的Calendar日历类解析 Calendar类是一个抽象类public abstract class Calendar implements Serializable, Clonea ...

  9. fullcalendar php,php使用fullcalendar日历插件详解,fullcalendar日历

    php使用fullcalendar日历插件详解,fullcalendar日历 最近做课程表的项目,找了好多个插件感觉都不好用,无意间看到了fullcalendar,还挺简单的,很方便,先贴一张项目页面 ...

最新文章

  1. 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
  2. Golang 编译MIPS helloworld程序出现 Illegal instruction 或者helloworld: applet not found 的解决
  3. Thymeleaf引用片段传入参数
  4. CSS美化滚动条的方法
  5. [Qt教程] 第17篇 2D绘图(七)涂鸦板
  6. python自动化测试——元素操作
  7. c语言time函数详解,C语言Time函数
  8. EViews10.0程序安装及注意事项
  9. vue使用a标签下载文件_vue+iview 通过a标签实现文件下载
  10. ansible——inventory主机清单
  11. 【仿真】Carla介绍与使用 [1] (附代码手把手讲解)
  12. 利用51单片机输出PWM波
  13. rs232接口_为什么越来越多人用RS232接口,却还分不清DB9、DB25的引脚定义?
  14. 服务器1m带宽文件上传好慢,为什么10m光纤宽带上传速度只有1m还不到2m
  15. colorsys模块(RGB/HSV/HSL/YIQ)颜色模型简介
  16. 银河麒麟安装达梦数据库
  17. 【想法】滴滴更新迭代功能
  18. 【转】2007最牛X网站收集,有些网站蛮有意思
  19. javascript之event对象
  20. 想成为小说家?这款儿童键盘让我的创作欲爆棚!

热门文章

  1. 基于51单片机的汽车超声波防撞声光报警系统proteus仿真原理图PCB
  2. 深富策略:资源品涨价行情或已处在顶部区域
  3. pyautogui打开记事本自动输入
  4. HTTP 中的用户身份验证
  5. 分享一款自带工作流引擎的NodeJS全栈框架,接单快手、创业神器
  6. 月入3w的大二学生告诉你:副业真的没有那么难搞
  7. uniapp iconfonts的引入以及使用
  8. 如何将销售效果最大化:从人工智能聊天机器人到即时聊天
  9. cmd进入指定盘符详解
  10. (Copy)数据结构与STL