仓库源文站点原文

<!--more-->

{% code %} package _9time;

import java.text.; import java.time.; import java.time.format.; import java.time.temporal.TemporalAdjusters; import java.util.;

public class Main { static String timestampToString(long epochMilli, Locale lo, String zoneId) { Instant ins = Instant.ofEpochMilli(epochMilli); DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT); return f.withLocale(lo).format(ZonedDateTime.ofInstant(ins, ZoneId.of(zoneId))); } public static void main(String[] args) { //Date int n = 123400; // 123400 System.out.println(n); // 1e208 System.out.println(Integer.toHexString(n)); // $123,400.00 System.out.println(NumberFormat.getCurrencyInstance(Locale.US).format(n));

    // 获取当前时间:
    Date date = new Date();
    System.out.println(date.getYear() + 1900); // 必须加上1900
    System.out.println(date.getMonth() + 1); // 0~11,必须加上1
    System.out.println(date.getDate()); // 1~31,不能加1
    // 转换为String:
    System.out.println(date.toString());
    // 转换为GMT时区:
    System.out.println(date.toGMTString());
    // 转换为本地时区:
    System.out.println(date.toLocaleString());

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(sdf.format(date));

    SimpleDateFormat sdf1 = new SimpleDateFormat("E MMM dd, yyyy");
    System.out.println(sdf1.format(date));

    //Calendar
    // 获取当前时间:
    Calendar c = Calendar.getInstance();
    int y = c.get(Calendar.YEAR);
    int m = 1 + c.get(Calendar.MONTH);
    int d = c.get(Calendar.DAY_OF_MONTH);
    int w = c.get(Calendar.DAY_OF_WEEK);
    int hh = c.get(Calendar.HOUR_OF_DAY);
    int mm = c.get(Calendar.MINUTE);
    int ss = c.get(Calendar.SECOND);
    int ms = c.get(Calendar.MILLISECOND);
    System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);

    // 清除所有:
    c.clear();
    // 设置2019年:
    c.set(Calendar.YEAR, 2019);
    // 设置9月:注意8表示9月:
    c.set(Calendar.MONTH, 8);
    // 设置2日:
    c.set(Calendar.DATE, 2);
    // 设置时间:
    c.set(Calendar.HOUR_OF_DAY, 21);
    c.set(Calendar.MINUTE, 22);
    c.set(Calendar.SECOND, 23);
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
    // 2019-09-02 21:22:23

    //TimeZone
    TimeZone tzDefault = TimeZone.getDefault(); // 当前时区
    TimeZone tzGMT9 = TimeZone.getTimeZone("GMT+09:00"); // GMT+9:00时区
    TimeZone tzNY = TimeZone.getTimeZone("America/New_York"); // 纽约时区
    System.out.println(tzDefault.getID()); // Asia/Shanghai
    System.out.println(tzGMT9.getID()); // GMT+09:00
    System.out.println(tzNY.getID()); // America/New_York
    System.out.println(TimeZone.getAvailableIDs().toString());


    //北京时间转为纽约时间
    // 清除所有:
    c.clear();
    // 设置为北京时区:
    c.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
    // 设置年月日时分秒:
    c.set(2019, 10 /* 11月 */, 20, 8, 15, 0);
    // 显示时间:
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf2.setTimeZone(TimeZone.getTimeZone("America/New_York"));
    System.out.println(sdf2.format(c.getTime()));
    // 2019-11-19 19:15:00


    //时间加减
    // 清除所有:
    c.clear();
    // 设置年月日时分秒:
    c.set(2019, 10 /* 11月 */, 20, 8, 15, 0);
    // 加5天并减去2小时:
    c.add(Calendar.DAY_OF_MONTH, 5);
    c.add(Calendar.HOUR_OF_DAY, -2);
    // 显示时间:
    SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d3 = c.getTime();
    System.out.println(sdf3.format(d3));
    // 2019-11-25 6:15:00

    //LocalDateTime
    LocalDate d4 = LocalDate.now(); // 当前日期
    LocalTime t4 = LocalTime.now(); // 当前时间
    LocalDateTime dt4 = LocalDateTime.now(); // 当前日期和时间
    System.out.println(d4); // 严格按照ISO 8601格式打印
    System.out.println(t4); // 严格按照ISO 8601格式打印
    System.out.println(dt4); // 严格按照ISO 8601格式打印

    // 指定日期和时间:
    LocalDate d5 = LocalDate.of(2019, 11, 30); // 2019-11-30, 注意11=11月
    LocalTime t5 = LocalTime.of(15, 16, 17); // 15:16:17
    LocalDateTime dt5 = LocalDateTime.of(2019, 11, 30, 15, 16, 17);
    LocalDateTime dt55 = LocalDateTime.of(d5, t5);
    System.out.println(d5);
    System.out.println(t5);
    System.out.println(dt5);
    System.out.println(dt55);


    LocalDateTime dt6 = LocalDateTime.parse("2019-11-19T15:16:17");
    LocalDate d6 = LocalDate.parse("2019-11-19");
    LocalTime t6 = LocalTime.parse("15:16:17");
    System.out.println(dt6);
    System.out.println(d6);
    System.out.println(t6);

    //DateTimeFormatter
    // 自定义格式化:
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
    System.out.println(dtf.format(LocalDateTime.now()));

    // 用自定义格式解析:
    LocalDateTime dt2 = LocalDateTime.parse("2019/11/30 15:16:17", dtf);
    System.out.println(dt2);

    //时间加减
    LocalDateTime dt = LocalDateTime.of(2019, 10, 26, 20, 30, 59);
    System.out.println(dt);
    // 加5天减3小时:
    LocalDateTime dt7 = dt.plusDays(5).minusHours(3);
    System.out.println(dt7); // 2019-10-31T17:30:59
    // 减1月:
    LocalDateTime dt8 = dt7.minusMonths(1);
    System.out.println(dt8); // 2019-09-30T17:30:59


    //时间日期调整
    LocalDateTime dt9 = LocalDateTime.of(2019, 10, 26, 20, 30, 59);
    System.out.println(dt9);
    // 日期变为31日:
    LocalDateTime dt10 = dt9.withDayOfMonth(31);
    System.out.println(dt10); // 2019-10-31T20:30:59
    // 月份变为9:
    LocalDateTime dt11 = dt10.withMonth(9);
    System.out.println(dt11); // 2019-09-30T20:30:59

    //with()
    // 本月第一天0:00时刻:
    LocalDateTime firstDay = LocalDate.now().withDayOfMonth(1).atStartOfDay();
    System.out.println("本月第一天0:00时刻:"+firstDay);

    // 本月最后1天:
    LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
    System.out.println("本月最后1天:"+lastDay);

    // 下月第1天:
    LocalDate nextMonthFirstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());
    System.out.println("下月第1天:"+nextMonthFirstDay);

    // 本月第1个周一:
    LocalDate firstWeekday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
    System.out.println("本月第1个周一:"+firstWeekday);


    //判断时间先后
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime target = LocalDateTime.of(2019, 11, 19, 8, 15, 0);
    System.out.println(now.isBefore(target));
    System.out.println(LocalDate.now().isBefore(LocalDate.of(2019, 11, 19)));
    System.out.println(LocalTime.now().isAfter(LocalTime.parse("08:15:00")));

    //Duration和Period 时间间隔,日期间隔
    LocalDateTime start = LocalDateTime.of(2019, 11, 19, 8, 15, 0);
    LocalDateTime end = LocalDateTime.of(2020, 1, 9, 19, 25, 30);
    Duration d2 = Duration.between(start, end);
    Duration d21 = Duration.ofHours(10); // 10 hours
    Duration d22 = Duration.parse("P1DT2H3M"); // 1 day, 2 hours, 3 minutes
    System.out.println(d2); // PT1235H10M30S
    System.out.println(d21); // PT1235H10M30S
    System.out.println(d22); // PT1235H10M30S

    Period p = LocalDate.of(2019, 11, 19).until(LocalDate.of(2020, 1, 9));
    System.out.println(p); // P1M21D

    /**ZonedDateTime*/
    ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区
    ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用指定时区获取当前时间
    System.out.println(zbj);
    System.out.println(zny);


    // 以中国时区获取当前时间:
    ZonedDateTime zbj1 = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
    // 转换为纽约时间:
    ZonedDateTime zny1 = zbj1.withZoneSameInstant(ZoneId.of("America/New_York"));
    System.out.println(zbj1);
    System.out.println(zny1);

    ZonedDateTime zdt = ZonedDateTime.now();
    LocalDateTime ldt = zdt.toLocalDateTime();
    System.out.println(ldt);

    /**DateTimeFormatter*/
    ZonedDateTime zdt1 = ZonedDateTime.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm ZZZZ");
    System.out.println(formatter.format(zdt1));

    DateTimeFormatter zhFormatter = DateTimeFormatter.ofPattern("yyyy MMM dd EE HH:mm", Locale.CHINA);
    System.out.println(zhFormatter.format(zdt1));

    DateTimeFormatter usFormatter = DateTimeFormatter.ofPattern("E, MMMM/dd/yyyy HH:mm", Locale.US);
    System.out.println(usFormatter.format(zdt1));

    LocalDateTime ldt1 = LocalDateTime.now();
    System.out.println(DateTimeFormatter.ISO_DATE.format(ldt1));
    System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(ldt1));


    //Instant 当前时间戳

    Instant instant = Instant.now();
    System.out.println(instant.getEpochSecond());
    System.out.println(instant.toEpochMilli());


    // 以指定时间戳创建Instant:
    Instant ins = Instant.ofEpochSecond(1568568760);
    ZonedDateTime zdt2 = ins.atZone(ZoneId.systemDefault());
    System.out.println(zdt2); // 2019-09-16T01:32:40+08:00[Asia/Shanghai]

    /**旧API转新API*/
    // Date -&gt; Instant:
    Instant ins1 = new Date().toInstant();

    // Calendar -&gt; Instant -&gt; ZonedDateTime:
    Calendar calendar = Calendar.getInstance();
    Instant ins2 = Calendar.getInstance().toInstant();
    ZonedDateTime zdt3 = ins2.atZone(calendar.getTimeZone().toZoneId());
    System.out.println(zdt3);

    /**新API转旧API*/
    // ZonedDateTime -&gt; long:
    ZonedDateTime zdt4 = ZonedDateTime.now();
    long ts = zdt4.toEpochSecond() * 1000;

    // long -&gt; Date:
    Date date1 = new Date(ts);

    // long -&gt; Calendar:
    Calendar calendar1 = Calendar.getInstance();
    calendar1.clear();
    calendar1.setTimeZone(TimeZone.getTimeZone(zdt.getZone().getId()));
    calendar1.setTimeInMillis(zdt4.toEpochSecond() * 1000);


    //数据库时间
    long ts1 = 1574208900000L;
    System.out.println(timestampToString(ts1, Locale.CHINA, "Asia/Shanghai"));
    System.out.println(timestampToString(ts1, Locale.US, "America/New_York"));
}

} {% endcode %}