第十三天:时间日期

public static String leftPad(String str,int length,char ch){
//数组长度与所要的长度一样。
  char[] chs = new char[length];
//把数组chs数组中每个位置上都替换成ch。
   Arrays.fill(chs, ch);
   System.out.println(Arrays.toString(chs));
//把字符串转换成一个char数组
   char[] src = str.toCharArray();
   /**
    * 参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。 


    */
   System.arraycopy(src, 0, chs, 
       length-src.length, src.length);
   return new String(chs);
}




第三方包的使用
  1 在项目文件夹下创建文件夹 lib
  2 复制 *.jar文件到 lib
  3 配置jar文件到项目的CLASSPATH中
   选择项目->File->Properties
    -> Java Build Path-> Libraries
    -> add JARs 
    
commons-lang-2.5.jar这个jar包下包含大量实用的小工具。是apach开源的
    
    
    
时间日期
  1 java 中基本的时间表示 long //是指从1970年到现在的毫秒数
  2 Java提供了Date类型表示时间和日期
    Date 是long类型的包装
  3 Calendar 是历法的的抽象.
    历法: 公历, 农历, 太阳历, ...
    GregorianCalendar 是历法的实现, 采用公历
    (太阳历) 算法实现的. 
    Calender cal = Calender.getInstance();
  4      new Date(long)
         date.setTime(long)  cal.setTime(Date);
         ---------->      --------->
   long <---------- Date <---------  Calendar
        date.getTime()     cal.getTime()     
    
    long time = 0;//1970 1 1
    Date date = new Date(); //当前时间
    date.setTime(time);// 1970 1 1
    Calendar cal = 
      new GregorianCalendar();//当前时间
    cal.setTime(new Date(time));// 1970 1 1
    Date d = cal.getTime();
    long l = cal.getTime().getTime();//0
       
  5 Date 和 Calendar 的默认值就是当前时间
  6 日期的计算
    如: 计算商品的促销日期:
    输入: 商品生产日期, 和保质期月份
    返回: 商品的促销日期, 是过期前两周周的周五
    
  7 日期的输入与输出(以下两段代码实现了输入与输出)
  
  日期格式化:
 //DateFormat只是一个格式化的类,具体按照公历,太阳历格式化要具体实现类
 //SimpleDateFormat是其中一个简单的实现
  /**
* java.text 
类 DateFormat
java.lang.Object
 java.text.Format
     java.text.DateFormat
所有已实现的接口: 
Serializable, Cloneable 
直接已知子类: 
SimpleDateFormat 
*/
DateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
//DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
String string = fmt.format(date);
System.out.println(string);
  
  
  以下为经典的格式化,记住:
    java.text.SimpleDateFormat fmt = 
      new SimpleDateFormat("yyyy-MM-dd");
    
    构建SimpleDateFormat 一般提供日期的格式
     "yyyy-MM-dd" 具体参看 javadoc
    如: "yyyy-MM-dd HH:mm:ss"
       "yyyyMMdd"
       "dd/MM/yyyy"
       "MM/dd/yyyy"
       
//这个十分有用,可以把从前台得到的字符串转换成相应的时间类型,十分好,正好用在jobsys上。 
//这个把前台转过来的字符串转换成了日期类型,十分伟大。十分厉害 。正好 用在jobsys上。
String string2 = "1997-6-7";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = format.parse(string2);
System.out.println("date2:"+date2);
//如果输入一个long类型,那么先把它转换(parse)成DATE再输出。
//如果输入一个Calendar类型,那么先把它转换(parse)成DATE再输出。


//用java自带的类实现
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar();
System.out.println("calendar:"+format.format(calendar.getTime()));


//使用 commons lang 格式化日期.十分让人振奋人心。
String string3 = DateFormatUtils.format(calendar,"yyyy-MM-dd");
System.out.println("用DateFormatUtils格式化:"+string3);

    fmt.parse(String)可以实现将(合法)字符串解
     析为日期类型, 经常用于处理日期输入.
     
    fmt.format(Date) 可以把日期格式化为字符串
     用于输出处理.


last:日期计算问题 用Calender这个类提供了十分方便而复杂的方法。






内部类- 定义在类的内部的类, 根据位置分为4类
  1 静态内部类:使用static修饰,声明在类体中,可以使用
   外部类类名访问,在类内部可以省略类名。静态内部类中
   可以访问外部类的静态成员。
   //静态内部类只要这个类装载以后就能够用了,而且能够访问这个类的静态资源。
  2 成员内部类: 声明在类体中,不使用static,具有类的成员特征
   也就是,必须有类的实例才能创建内部类实例。内部类实例
   可以访问共享外部类的成员变量。很常用。
   如:链表的节点就可以定义为内部类如android中的handler.
  3 局部内部类:把类声明在方法中,就是局部内部类,作用域
   类似局部变量。很少见。
  4 匿名内部类,匿名类:非常常见,可以写在任何地方,就行一般的语句。
    语法更象是创建对象:
     Date d = new Date(){};
    匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
    以后的类体。类体中可使用所有类的语法。
    匿名类不能写构造器。
    匿名类可以从抽象类或者接口继承,
    必须提供抽象方法的实现。
  5 任何内部类都编译成独立的class文件
  6 最大的作用:封装!内部类很少在外部使用.
  7 通过实例简单理解记忆语法.
    *在今后的案例中灵活练习内部类
    
    
/**AnnInnerClassDemo.java
* 这个例子能够说明两个问题
* 第一、继承问题,当我们继承一个类的时间,在调用方法的时侯,如果这个
* 方法没有被覆盖,也就是在子类中没有被重写,那么就会调用父类的方法
* 如果这个方法被重写就会调用子类的方法,这个就是方法的动态绑定。
* 属性不能被覆盖,JVM不会调用被重写的属性,如果想要访问子类的属性
* 需要写一个setter方法。参看第九天:java动态绑定在属性和方法上的不同.txt
* 第二、匿名内部类的实质是继承,不加{}就是new一个对象,如果加{}就是
  继承这个抽象类,如果匿名内部类new的一个接口,那么它就是实现接口,所以要
  实现接口里面的方法。其实这就是android中的Handler的原理所在。
只要一加{}就是匿名内部类。且记,否则就是new一个新的对象 。
*
*/
 
 /**
 //char的序列
CharSequence charSequence = new CharSequence() {

@Override
public CharSequence subSequence(int start, int end) {
// TODO Auto-generated method stub
return null;
}

@Override
public int length() {
// TODO Auto-generated method stub
return 10;
}

@Override
public char charAt(int index) {
// TODO Auto-generated method stub
return 'A';
}
};


StringBuilder stringBuilder = new StringBuilder(charSequence);
System.out.println(stringBuilder);
 
 这个方法说尽了android的精华。
 写一个匿名内部类,在new StringBuilder(charSequence)的时间
 回调了前两个方面,赋值给stringBuilder。
 我们知道在android中,非常多的匿名内部类,然后有一个相应的引用 ,当其它
 地方调用时间,它就会回调这个接口里面的相应方法,具体调用哪个如何调用由java底层决定 。
 
 */
 
 String[] strs = {"abcff", "abc", "acde", "a"};
Arrays.sort(strs, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
return s1.length() - s2.length();
}

});
System.out.println(Arrays.toString(strs));


这个方法又有非常多的好处,首先java有直接可以排序的类,用Arrays.sort()方法,
而且我们可以自己定义排序规则,Comparator(),例如可用行扑克排序。
而且最后我们在打印数组的时间,不用再写什么循环了,用Arrays.toString(strs)即可。




预习:
  Java的集合框架
  
  
  
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值