替代Java类的日期和时间【 Joda Time】

其实在Joda Time学习的首页,就可以看到介绍,作为一个相对jdk 的date和calendar的更好的解决方案。joda-time在很多方面都支持的更多,例如:更加完整的时区支持,更易用的api接口。体现在日期的计算,比较和格式转换。

本文主要分享一些在开发过程中常用的joda-time的API以及几个示例。一些在笔者在处理oracle的timestamp的方案。

获取不同格式的时间

`System.out.println("Date格式:现在的时间是:"+new Date());
    System.out.println("joda-time:现在的时间是:"+new DateTime());

    System.out.println("joda-time:只获取年月日时间:"+(new DateTime()).toString("yyyy-MM-dd"));
    System.out.println("joda-time:今天是"+(new DateTime()).toString("E"));
    System.out.println("joda-time:获取时间到秒:"+(new DateTime()).toString("yyyy-MM-dd HH:mm:ss"));
    System.out.println("joda-time:获取时间到毫秒:"+(new DateTime())
            .toString(" yyyy/MM/dd/ E HH:mm:ss.SSS"));
    System.out.println("joda-time:获取时间带下午:"+(new DateTime()).toString("MM/dd/yyyy hh:mm:ss.SSSa"));
    ;`

获取不同时区的时间

`System.out.println("joda-time:获取所在时区名称时间:"+(new DateTime()).toString("MM/dd/yyyy HH:mm ZZZZ"));
    System.out.println("joda-time:获取所在时区时间(依据格林威治时间标准):"+(new DateTime()).toString("MM/dd/yyyy HH:mm Z")+"(时区号)")
    //洛杉矶时间
    DateTimeZone.setDefault(DateTimeZone.forID("America/Los_Angeles"));     
    return  new DateTime(DateTimeZone.forID(pattern));`

与calendar的转换

joda-time 仍然支持从calendar的方式转换为localtime。localtime提供默认的构造方法来转化。
Calendar calendar=Calendar.getInstance();
LocalTime localTime=new LocalTime(calendar);
System.out.println("由calendar转化为localtime的时间:"+localTime.toString());

计算时间

计算二者之间存在毫秒
`Duration duration=new Duration(dateOne,dateTwo);
    return duration.getMillis();
//某天是否存在于区间内
    Interval i = new Interval(new DateTime("2012-02-01"), new DateTime("2012-04-01"));  
    System.out.println( i.contains(new DateTime("2012-03-01")));`
    //得到明天
    DateTime dt=new DateTime();
    System.out.println(dt.plusDays(1));

其他

获取今天还剩多长时间
`DateTime nowTime = new DateTime();
    DateTime endOfDay = nowTime.millisOfDay().withMaximumValue();

    return endOfDay.getMillis() - nowTime.getMillis();`
获取一天开始的时间
`DateTime nowTime = new DateTime();
    DateTime startOfDay = nowTime.withTimeAtStartOfDay();`
获取一天结束的时间
`DateTime nowTime = new DateTime();
    DateTime endOfDay = nowTime.millisOfDay().withMaximumValue();`

将oracle时间戳转化为long类型

`public static void timeStmap2Long(String strDate) throws ParseException {
    String tranDate = strDate.replace(".", ":").toString().replace(" ", "");
    System.out.println("字符串长度为:" + tranDate.trim().length());
    // target 日期pattern
    // 1.获取月份
    String month = tranDate.substring(3, 4);
    if (tranDate.trim().length() == 26) {
        // 1.获取月份
        month = tranDate.substring(3, 5);
    }

    System.out.println("月份为:" + month);
    // 2.获取天数
    String day = tranDate.substring(0, 2);

    // 返回第二次出现"-"的索引
    int twoindex = tranDate.lastIndexOf("-");
    // 3.获取年份
    String year = "20" + tranDate.substring(twoindex + 1, twoindex + 3);
    // 4.获取时间
    // 取得上下午来判断小时
    String time = tranDate.substring(twoindex + 3, twoindex + 12);

    // 取得上下午
    String h = tranDate.substring(twoindex + 18, twoindex + 20);
    String rightTime = time;
    int intHHtime = 0;
    if ("下午".equals(h)) {
        String HHtime = tranDate.substring(twoindex + 4, twoindex + 5);
        System.out.println(HHtime + "小时");
        intHHtime = Integer.parseInt(HHtime) + 12;
        rightTime = intHHtime + ":"
                + tranDate.substring(twoindex + 6, twoindex + 11);
        System.out.println(rightTime);
    }

    // 5.获取毫秒
    String msec = tranDate.substring(twoindex + 12, twoindex + 18);
    int msecInt = Integer.parseInt(msec);

    String targetDate = month + "/" + day + "/" + year + " " + rightTime;
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Date dt = sdf.parse(targetDate);
    long tarLong = dt.getTime() / 1000 + msecInt;
    System.out.println(tarLong);

}`

long类型转换为datetime

这个直接由joda-time实现了一个构造函数来支持,简洁易用。
`  return new DateTime(datetime);`

诸如此类主要是DateTime、和localtime这两个类在起作用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏修

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值