74. Java打印当月日历

自从Java 1.8 开始,提供了新的日期和时间处理对象,使用起来方便很多。对于新项目,推荐使用该API,为了兼容旧项目,原有的API仍然可以继续使用。下面就简单使用新的API打印当月的日历:

package github.banana;

import java.time.DayOfWeek;
import java.time.LocalDate;

/**
 * 打印当月日历
 *
 * @author zhgxun
 */
public class Calendar {

    public static void main(String[] args) {
        // 本地日期对象
        LocalDate date = LocalDate.now();
        // 指定一个日期对象
        // LocalDate date = LocalDate.of(2017, 10, 5);
        // 当前月份值
        int month = date.getMonthValue();
        // 当月所在的天
        int today = date.getDayOfMonth();

        // 重置月的天到起始位置, 减去指定的天数, 即是回复到月初第一天
        date = date.minusDays(today - 1);

        // 当前时间对应的周
        DayOfWeek weekday = date.getDayOfWeek();
        // 对应周的枚举
        int value = weekday.getValue();

        // 打印日历标题
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        // 在第一天的空白处打印空白
        for (int i = 1; i < value; i++) {
            System.out.printf("%4s", " ");
        }

        // 遍历当月
        while (date.getMonthValue() == month) {
            System.out.printf("%3d", date.getDayOfMonth());
            // 当天着重标注
            if (date.getDayOfMonth() == today) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
            // 每一次循环递增一天
            date = date.plusDays(1);
            // 如果是每周的第一天则换行
            if (date.getDayOfWeek().getValue() == 1) {
                System.out.println();
            }
        }

        // 如果不是每周的第一天无需处理
        if (date.getDayOfWeek().getValue() != 1) {
            System.out.println();
        }
    }

}

当月日历:

Mon Tue Wed Thu Fri Sat Sun
  1   2   3   4   5   6   7 
  8   9  10  11  12  13  14 
 15  16  17  18  19  20  21*
 22  23  24  25  26  27  28 
 29  30  31 

Process finished with exit code 0

73. Java执行shell命令

在PHP中,执行一段shell命令非常简单,直接调用语言函数exec()system()等即可完成,而且返回值也是显而易见的。但Java不是,做不到这么简单。

比如在PHP中简单执行exec("la -al")的结果:

// @see http://php.net/manual/zh/function.exec.php
exec('ls -l', $output);
print_r($output);

输出:

zhgxun-pro:~ zhgxun$ php test.php 
Array
(
    [0] => total 8
    [1] => drwx------+ 13 zhgxun  staff   442 Jan 21 19:57 Desktop
    [2] => drwx------+ 10 zhgxun  staff   340 Jan  4 22:12 Documents
    [3] => drwx------+  9 zhgxun  staff   306 Jan 20 11:45 Downloads
    [4] => drwx------@ 56 zhgxun  staff  1904 Dec 16 14:40 Library
    [5] => drwx------+  3 zhgxun  staff   102 Aug 24  2015 Movies
    [6] => drwx------+  6 zhgxun  staff   204 Dec 21 23:00 Music
    [7] => drwx------+  8 zhgxun  staff   272 Mar 27  2017 Pictures
    [8] => drwxr-xr-x+  9 zhgxun  staff   306 Dec 25 09:23 Public
    [9] => drwxr-xr-x   2 zhgxun  staff    68 Aug 14 14:37 Snapshots
    [10] => drwxr-xr-x   4 zhgxun  staff   136 Mar 28  2017 Soft
    [11] => drwxr-xr-x   6 zhgxun  staff   204 May 10  2017 go
    [12] => -rw-r--r--   1 zhgxun  staff    56 Jan 21 19:56 test.php
)
zhgxun-pro:~ zhgxun$ ls -l
total 8
drwx------+ 13 zhgxun  staff   442 Jan 21 19:57 Desktop
drwx------+ 10 zhgxun  staff   340 Jan  4 22:12 Documents
drwx------+  9 zhgxun  staff   306 Jan 20 11:45 Downloads
drwx------@ 56 zhgxun  staff  1904 Dec 16 14:40 Library
drwx------+  3 zhgxun  staff   102 Aug 24  2015 Movies
drwx------+  6 zhgxun  staff   204 Dec 21 23:00 Music
drwx------+  8 zhgxun  staff   272 Mar 27  2017 Pictures
drwxr-xr-x+  9 zhgxun  staff   306 Dec 25 09:23 Public
drwxr-xr-x   2 zhgxun  staff    68 Aug 14 14:37 Snapshots
drwxr-xr-x   4 zhgxun  staff   136 Mar 28  2017 Soft
drwxr-xr-x   6 zhgxun  staff   204 May 10  2017 go
-rw-r--r--   1 zhgxun  staff    56 Jan 21 19:56 test.php
zhgxun-pro:~ zhgxun$

然而使用Java,就没这么直接了。

Read More