Press "Enter" to skip to content

Month: 2012年12月

JAVA计算两个日期之间相差的天数

热度 56,291 度

在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。

调用方式:

long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式
long date2 = getDateTime("20121212");  
int day = dateInterval(date1, date2);  
System.out.println(day); 

输出:11

具体实现方法调用:

    /** 
     * 计算出两个日期之间相差的天数 
     * 建议date1 大于 date2 这样计算的值为正数 
     * @param date1 日期1 
     * @param date2 日期2 
     * @return date1 - date2 
     */  
    public static int dateInterval(long date1, long date2) {
        if(date2 > date1){
            date2 = date2 + date1;
            date1 = date2 - date1;
            date2 = date2 - date1;
        }
 
         // Canlendar 该类是一个抽象类  
         // 提供了丰富的日历字段 
         // 本程序中使用到了 
         // Calendar.YEAR    日期中的年份 
         // Calendar.DAY_OF_YEAR     当前年中的天数 
         // getActualMaximum(Calendar.DAY_OF_YEAR) 返回今年是 365 天还是366天 
        Calendar calendar1 = Calendar.getInstance(); // 获得一个日历  
        calendar1.setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当前时间值。  
          
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTimeInMillis(date2);
        // 先判断是否同年  
        int y1 = calendar1.get(Calendar.YEAR);
        int y2 = calendar2.get(Calendar.YEAR);
          
        int d1 = calendar1.get(Calendar.DAY_OF_YEAR);
        int d2 = calendar2.get(Calendar.DAY_OF_YEAR);
        int maxDays = 0;
        int day = 0;
        if(y1 - y2 > 0){
            day = numerical(maxDays, d1, d2, y1, y2, calendar2);
        }else{
            day = d1 - d2;
        }
        return day;
    }  
      
    /** 
     * 日期间隔计算 
     * 计算公式(示例): 
     *      20121201- 20121212
     *      取出20121201这一年过了多少天 d1 = 天数  取出20121212这一年过了多少天 d2 = 天数
     *      如果2012年这一年有366天就要让间隔的天数+1,因为2月份有29日。 
     * @param maxDays   用于记录一年中有365天还是366天 
     * @param d1    表示在这年中过了多少天 
     * @param d2    表示在这年中过了多少天 
     * @param y1    当前为2012年 
     * @param y2    当前为2012年 
     * @param calendar  根据日历对象来获取一年中有多少天 
     * @return  计算后日期间隔的天数 
     */  
    public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){
        int day = d1 - d2;
        int betweenYears = y1 - y2;
        List<Integer> d366 = new ArrayList<Integer>();
          
        if(calendar.getActualMaximum(Calendar.DAY_OF_YEAR) == 366){
            System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_YEAR));
            day += 1;
        }
          
        for (int i = 0; i < betweenYears; i++) {
            // 当年 + 1 设置下一年中有多少天  
            calendar.set(Calendar.YEAR, (calendar.get(Calendar.YEAR)) + 1);
            maxDays = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
            // 第一个 366 天不用 + 1 将所有366记录,先不进行加入然后再少加一个  
            if(maxDays != 366){
                day += maxDays;
            }else{
                d366.add(maxDays);
            }
            // 如果最后一个 maxDays 等于366 day - 1  
            if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){
                day -= 1;
            }
        }
          
        for(int i = 0; i < d366.size(); i++){
            // 一个或一个以上的366天  
            if(d366.size() >= 1){
                day += d366.get(i);
            } 
        }  
        return day;
    }
      
    /** 
     * 将日期字符串装换成日期 
     * @param strDate   日期支持年月日 示例:yyyyMMdd 
     * @return  1970年1月1日器日期的毫秒数 
     */  
    public static long getDateTime(String strDate) {
        return getDateByFormat(strDate, "yyyyMMdd").getTime();
    }
      
    /** 
     * @param strDate   日期字符串 
     * @param format    日期格式 
     * @return      Date 
     */  
    public static Date getDateByFormat(String strDate, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try{
            return (sdf.parse(strDate));
        }catch (Exception e){
            return null;
        }
    }
Leave a Comment

Mac截图快捷键

热度 2,801 度

1)Command-Shift-3: 将整个屏幕拍下并保存到桌面。

2)Command-Shift-Control-3:将整个屏幕拍下并保存到剪贴板(Clipboard),然后Command+V直接粘贴到如Photoshop,ppt等软件中编辑。

3)Command-Shift-4:将屏幕的一部分拍下并保存到桌面。按下这个组合键后,光标会变为一个十字,你可以拖拉来选取拍摄区域。

4)Command-Shift-Control-4:将屏幕的一部分拍下并保存到剪贴板。

5)Command-Shift-4再按空格键:这时光标会变为一个照相机图标,点击可拍下当前窗口或菜单或Dock以及图标等,只要将照相机图标移动到不同区域(有效区域会显示为浅蓝色)点击。

6)Command-Shift-Control-4再按空格键:将选取的窗口或其他区域的快照保存到剪贴板。

Leave a Comment

Eclipse快捷键【收藏】

热度 2,910 度

Ctrl 1 快速修复(最经典的快捷键,就不用多说了)
Ctrl D: 删除当前行
Ctrl Alt ↓ 复制当前行到下一行(复制增加)
Ctrl Alt ↑ 复制当前行到上一行(复制增加)
Alt ↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt ↑ 当前行和上面一行交互位置(同上)
Alt ← 前一个编辑的页面
Alt → 下一个编辑的页面(当然是针对上面那条来说了)
Alt Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift Ctrl Enter 在当前行插入空行(原理同上条)
Ctrl Q 定位到最后编辑的地方
Ctrl L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl M 最大化当前的Edit或View (再按则反之)
Ctrl / 注释当前行,再按则取消注释
Ctrl O 快速显示 OutLine
Ctrl T 快速显示当前类的继承结构
Ctrl W 关闭当前Editer
Ctrl K 参照选中的Word快速定位到下一个
Ctrl E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl /(小键盘) 折叠当前类中的所有代码
Ctrl ×(小键盘) 展开当前类中的所有代码
Ctrl Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt /来代替)
Ctrl Shift E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl J 正向增量查找(按下Ctrl J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl Shift J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl Shift F4 关闭所有打开的Editer
Ctrl Shift X 把当前选中的文本全部变味小写
Ctrl Shift Y 把当前选中的文本全部变为小写
Ctrl Shift F 格式化当前代码
Ctrl Shift P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt Shift开头的了)
Alt Shift R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt Shift M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt Shift C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt Shift L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt Shift F 把Class中的local变量变为field变量 (比较实用的功能)
Alt Shift I 合并变量(可能这样说有点不妥Inline)
Alt Shift V 移动函数和变量(不怎么常用)
Alt Shift Z 重构的后悔药(Undo)
编辑
作用域 功能 快捷键
全局 查找并替换 Ctrl F
文本编辑器 查找上一个 Ctrl Shift K
文本编辑器 查找下一个 Ctrl K
全局 撤销 Ctrl Z
全局 复制 Ctrl C
全局 恢复上一个选择 Alt Shift ↓
全局 剪切 Ctrl X
全局 快速修正 Ctrl1 1
全局 内容辅助 Alt /
全局 全部选中 Ctrl A
全局 删除 Delete
全局 上下文信息 Alt ?
Alt Shift ?
Ctrl Shift Space
Java编辑器 显示工具提示描述 F2
Java编辑器 选择封装元素 Alt Shift ↑
Java编辑器 选择上一个元素 Alt Shift ←
Java编辑器 选择下一个元素 Alt Shift →
文本编辑器 增量查找 Ctrl J
文本编辑器 增量逆向查找 Ctrl Shift J
全局 粘贴 Ctrl V
全局 重做 Ctrl Y
查看
作用域 功能 快捷键
全局 放大 Ctrl =
全局 缩小 Ctrl –
窗口
作用域 功能 快捷键
全局 激活编辑器 F12
全局 切换编辑器 Ctrl Shift W
全局 上一个编辑器 Ctrl Shift F6
全局 上一个视图 Ctrl Shift F7
全局 上一个透视图 Ctrl Shift F8
全局 下一个编辑器 Ctrl F6
全局 下一个视图 Ctrl F7
全局 下一个透视图 Ctrl F8
文本编辑器 显示标尺上下文菜单 Ctrl W
全局 显示视图菜单 Ctrl F10
全局 显示系统菜单 Alt –
导航
作用域 功能 快捷键
Java编辑器 打开结构 Ctrl F3
全局 打开类型 Ctrl Shift T
全局 打开类型层次结构 F4
全局 打开声明 F3
全局 打开外部javadoc Shift F2
全局 打开资源 Ctrl Shift R
全局 后退历史记录 Alt ←
全局 前进历史记录 Alt →
全局 上一个 Ctrl ,
全局 下一个 Ctrl .
Java编辑器 显示大纲 Ctrl O
全局 在层次结构中打开类型 Ctrl Shift H
全局 转至匹配的括号 Ctrl Shift P
全局 转至上一个编辑位置 Ctrl Q
Java编辑器 转至上一个成员 Ctrl Shift ↑
Java编辑器 转至下一个成员 Ctrl Shift ↓
文本编辑器 转至行 Ctrl L

搜索
作用域 功能 快捷键
全局 出现在文件中 Ctrl Shift U
全局 打开搜索对话框 Ctrl H
全局 工作区中的声明 Ctrl G
全局 工作区中的引用 Ctrl Shift G

文本编辑
作用域 功能 快捷键
文本编辑器 改写切换 Insert
文本编辑器 上滚行 Ctrl ↑
文本编辑器 下滚行 Ctrl ↓

文件
作用域 功能 快捷键
全局 保存 Ctrl X
Ctrl S
全局 打印 Ctrl P
全局 关闭 Ctrl F4
全局 全部保存 Ctrl Shift S
全局 全部关闭 Ctrl Shift F4
全局 属性 Alt Enter
全局 新建 Ctrl N

项目
作用域 功能 快捷键
全局 全部构建 Ctrl B

源代码
作用域 功能 快捷键
Java编辑器 格式化 Ctrl Shift F
Java编辑器 取消注释 Ctrl
Java编辑器 注释 Ctrl /
Java编辑器 添加导入 Ctrl Shift M
Java编辑器 组织导入 Ctrl Shift O
Java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。
也可以使用Ctrl 1自动修正。

运行
作用域 功能 快捷键
全局 单步返回 F7
全局 单步跳过 F6
全局 单步跳入 F5
全局 单步跳入选择 Ctrl F5
全局 调试上次启动 F11
全局 继续 F8
全局 使用过滤器单步执行 Shift F5
全局 添加/去除断点 Ctrl Shift B
全局 显示 Ctrl D
全局 运行上次启动 Ctrl F11
全局 运行至行 Ctrl R
全局 执行 Ctrl U

重构
作用域 功能 快捷键
全局 撤销重构 Alt Shift Z
全局 抽取方法 Alt Shift M
全局 抽取局部变量 Alt Shift L
全局 内联 Alt Shift I
全局 移动 Alt Shift V
全局 重命名 Alt Shift R
全局 重做 Alt Shift Y

Leave a Comment

Python获取网页得到编码方式

热度 2,998 度

利用Python获取网页是什么编码格式,这有利于在抓取数据时采用什么方式进行转换。以下是简单的代码片段:

#!/usr/bin/python
#Filename:helloworld.py
import urllib
f=urllib.urlopen('http://www.kiccleaf.com').info()
print f.getparam('charset')

输出结果:
UTF-8

Leave a Comment