美文网首页kotlin频道
Kotlin封装Date类

Kotlin封装Date类

作者: 747a945a4501 | 来源:发表于2016-08-17 16:33 被阅读1667次

前言


其实也没有,就是对日期操作简单一些,效果如下

val date = Date()
date + 1 //后一天
date - 1 //前一天
date + Month(2) //后2月
date - Year(3) //前3年
date++  //本月的最后一天
date--  //本月的第一天
取年月日时分秒 date[0]  date[1] date[2] 。。。 

//日期比较
if( date1 > date2){

}

代码实现


很简单 其实就是运算符重载

enum class DateOptUnit {
    YEAR,MONTH,DATE;
        fun parseType():Int{
        var value = Calendar.DATE
        when(this){
            YEAR -> value = Calendar.DATE
            MONTH -> value = Calendar.MONTH
            DATE ->  value = Calendar.DATE
        }
        return value
    }
}

data class DateOperator(val unit :DateOptUnit,val value: Int)

fun Any.year(value:Int):DateOperator {
    return DateOperator(DateOptUnit.YEAR,value)
}

fun Any.month(value:Int):DateOperator {
    return DateOperator(DateOptUnit.MONTH,value)
}

fun Any.day(value:Int):DateOperator {
    return DateOperator(DateOptUnit.DATE,value)
}

/**
 * date+1
 * 往后的几天
 */
operator fun Date.plus(nextVal:Int):Date{
    val calendar = GregorianCalendar()
    calendar.time = this
    calendar.add(Calendar.DATE, nextVal)
   return calendar.time
}

/**
 * date-1
 */
operator fun Date.minus(nextVal:Int):Date{
    val calendar = GregorianCalendar()
    calendar.time = this
    calendar.add(Calendar.DATE, nextVal*-1)
    return calendar.time
}

/**
 * date+year(3)
 * 往后的几天
 */
operator fun Date.plus(nextVal:DateOperator):Date{
    val calendar = GregorianCalendar()
    calendar.time = this
    calendar.add(nextVal.unit.parseType(), nextVal.value)
    return calendar.time
}

/**
 * date-month(4)
 */
operator fun Date.minus(nextVal:DateOperator):Date{
    val calendar = GregorianCalendar()
    calendar.time = this
    calendar.add(nextVal.unit.parseType(), nextVal.value*-1)
    return calendar.time
}

/**
 * 得到月末
 */
operator fun Date.inc():Date {
    val calendar = GregorianCalendar()
    calendar.time = this
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DAY_OF_MONTH, 0);
    return calendar.time
}

/**
 * 得到月初
 */
operator fun Date.dec():Date {
    val calendar = GregorianCalendar()
    calendar.time = this
    calendar.set(Calendar.DAY_OF_MONTH, 1)
    return calendar.time
}

/**
 * 取 年月日时分秒 0 - 5 
* 例如 2015-12-21 22:15:56 
* date[0]:2015  date[1]:12 date[2]:21  
*/
operator fun Date.get(position:Int):Int {
    val calendar = GregorianCalendar()
    calendar.time = this
        var value = 0
    when(position) {
        0 -> value = calendar.get(Calendar.YEAR)
        1 -> value = calendar.get(Calendar.MONTH)+1
        2 -> value = calendar.get(Calendar.DAY_OF_MONTH)
        3 -> value = calendar.get(Calendar.HOUR)
        4 -> value = calendar.get(Calendar.MINUTE)
        5 -> value = calendar.get(Calendar.SECOND)
    }
    return value
}

/**
 * 比较2个日期
 * if(date1 > date2) {
 * }
 */

operator fun Date.compareTo(compareDate : Date):Int {
    return (time - compareDate.time).toInt()
}

/**
 * 日期转化为字符串 
*/
fun Date.stringFormat(formatType:String):String{
    return SimpleDateFormat(formatType).format(this)
}

相关文章

  • Kotlin封装Date类

    前言 其实也没有,就是对日期操作简单一些,效果如下 代码实现 很简单 其实就是运算符重载

  • JAVA时间

    Date类 java.util提供了Date类来封装日期和时间。 Date();--当前时间Date(long m...

  • java.util 包

    2.2 Date 类 Date 类表示日期和时间,里面封装了操作日期和时间的方法。Date 类经常用来获取系统当前...

  • Java 日期时间

    Date java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化...

  • Java 日期时间

    java.util包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date ...

  • Java8中的时间和日期

    Date Java8之前java.util 包提供了 Date 类来封装当前的日期和时间,Date 类提供两个构造...

  • Java教程 第17章 日期时间

    java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date...

  • Java基础 日期和时间!!!

    java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date...

  • Java 日期时间

    java.util 包提供了Date类来封装当前的日期时间。Date类提供两个构造函数来实例化Date对象。 第二...

  • kotlin小白日记2「工具类的封装,Anko简化吐司,空值处理

    Kotlin初体验二「kotlin框架Anko的使用,工具类的封装,空值处理」 本篇上篇为kotlin初体验,源代...

网友评论

  • 不可复制_4612:enum class DateOptUnit {
    YEAR,MONTH,DATE;
    fun parseType():Int{
    var value = Calendar.DATE
    when(this){
    YEAR -> value = Calendar.DATE
    MONTH -> value = Calendar.MONTH
    DATE -> value = Calendar.DATE
    }
    return value
    }
    }

    条件为Year的时候写错了,应该是 Calendar.YEAR。。。

本文标题:Kotlin封装Date类

本文链接:https://www.haomeiwen.com/subject/zibmsttx.html