java 中日期 时间 GMT UTC CST joda time locale

时间种类:

时间标准简介UTC

协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps
Universel Coordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。

GMT(格林尼治平时)

格林尼治平时(又称格林尼治平均时间或格林尼治标准时间,旧译格林威治标准时间;英语:Greenwich Mean
Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。
由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)。

CST(北京时间)

北京时间,China Standard Time,中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8。

不过这个CST这个缩写比较纠结的是它可以同时代表四个不同的时间: Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30 China Standard Time UT+8:00
Cuba Standard Time UT-4:00


Java Date使用UTC时间,如 Tue Jan 05 14:28:41 CST 2016 表示China Standard Time UT+8:00 。

 

日期和时间模式


日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 ‘A’ 到’Z’ 和’a’ 到’z’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘) 引起来,以免进行解释。””” 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符’A’ 到’Z’ 和’a’ 到’z’ 都被保留):

字母    日期或时间元素    类型    示例
G    Era 标志符    Text    AD
y    年份    Number    1996; 96
M    年份中的月份    Text    July; Jul; 07
w    年份中的周数    Number    27
W    月份中的周数    Number    2
D    年份中的天数    Number    189
d    月份中的天数    Number    10
F    月份中的星期    Number    2
E    星期中的天数    Text    Tuesday; Tue
a    Am/pm 标记    Text    PM
H    一天中的小时数(0-23)    Number    0
k    一天中的小时数(1-24)    Number    24
K    am/pm 中的小时数(0-11)    Number    0
h    am/pm 中的小时数(1-12)    Number    12
m    小时中的分钟数    Number    30
s    分钟中的秒数    Number    55
S    毫秒数    Number    978
z    时区    General time zone    Pacific Standard Time; PST; GMT-08:00
Z    时区    RFC 822 time zone    -0800

 

joda time

joda time  和jdk 兼容,并增加了获取当前时间,增加时间,减少时间等 功能的简化实现。

使用参考 https://www.ibm.com/developerworks/cn/java/j-jodatime.html

一、Joda Time基础操作

1、 构造指定时间

// 明确给出年月日时分秒,同时还可以指定毫秒
DateTime dateTime = new DateTime(2017,9,14,20,30,0);  

// 使用时间戳构造
Datetime dateTime = new DateTime(1505371053358L);

// 使用字符串构造,使用字符串构造需要自己定义pattern
String date = "2017-09-14 20:30:00";
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = dateTimeFormatter.parseDateTime(date);

// 指定时区构造时间
DateTime dateTime = new DateTime(DateTimeZone.forTimeZone(TimeZone.getTimeZone("Asia/Shanghai")));

注意:”Asia/Shanghai”是国际时区Id,该ID可以通过JDK代码获取,代码如下:

String[] zones = TimeZone.getAvailableIDs();
for (String zone : zones) {
    System.out.println(zone);
}

2 获取当前时间的时间戳

// JDK
long currentTimeOfMills = System.currentTimeMillis();
// Joda Time
long currentTimeOfMills = DateTime.now().getMillis();

3 获得当前时间的时区

DateTimeZone zone = DateTime.now().getZone();

4  获取指定时区的当前时间

DateTimeZone gmt = DateTimeZone.forID("GMT");
DateTime dateTime = DateTime.now().toDateTime(gmt);

二、Joda Time 对年月日的一些简单操作。

1、 获取月初第一天和月末最后一天

DateTime dateTime = new DateTime();
// 月初第一天
DateTime theFirstDateOfMonth = dateTime.dayOfMonth().withMinimumValue();
//  当前月最后一天
DataTime theEndDataOfMonth = dateTime.dayOfMonth().withMaximumValue();

// 这一天是几号
int day = dateTime.getDayOfMonth();
// 这一天是哪月
int month = dateTime.getMothOfYear();
// 这一天是哪年
int year = dateTime.getYear();
// 判断本月是不是9月
if(dateTime.getDayOfMonth() == DateTimeConstants.SEPTEMBER){
//TODO
}

// 获取相对于当前时间的月份,比如获取上个月的时间或者下个月的是时间,方法minusMoths接受一个int的参数,如果这个参数等于0,代表本月,大于0代表已经过去的时间,小于0代表还没有到来的时间
 LocalDate lastDayOfMonth = new LocalDate().minusMonths(1).dayOfMonth().withMaximumValue();

2、关于星期的操作

DateTime dateTime = new DateTime();
// 今天是星期几
int week = dateTime.getDayOfWeek();
// 判断今天是不是星期三
if(dateTime.getDayOfWeek() == DateTimeConstants.WEDNESDAY){
    // TODO
}

3、计算时间差

注意开始时间与结束时间参数位置,如果开始时间小于结束时间,得到的天数是正数,否则就是负数哦!

DateTime currentDateTime = new DateTime();
DateTime targetDateTime = new DateTime(2017,10,1,0,0,0);

// 相差多少年
int years = Years.yearsBetween(currentDateTime,targetDateTime).getYears();
// 相差多少月
int months = Months.monthsBetween(currentDateTime,targetDateTime).getMonths();
// 距离国庆放假还有多少天,嘎嘎!
int days = Days.daysBetween(currentDateTime,targetDateTime).getDays();
// 相差多少小时
int hours = Hours.hoursBetween(currentDateTime,targetDateTime).getHours();
// 相差多少分钟
int minutes = Minutes.minutesBetween(currentDateTime,targetDateTime).getMinutes();
// 相差多少秒
int seconds = Seconds.secondsBetween(currentDateTime,targetDateTime).getSeconds();
// 相差多少周
int weeks = Weeks.weeksBetween(currentDateTime,targetDateTime).getWeeks();

4 获取零点相关的时间

DateTime currentDateTime = new DateTime();
// 今天的零点
DateTime dateTime = currentDateTime.withMillisOfDay(0);
// 昨天的零点
DateTime dateTime = currentDateTime.withMillisOfDay(0).plusDays(-1);
// 明天的零点
DateTime dateTime = currentDateTime.withMillisOfDay(0).plusDays(1);
// 这一年最后一天0点
new DateTime().dayOfYear().withMaximumValue().withMillisOfDay(0)
// 这一年第一天0点
new DateTime().dayOfYear().withMinimumValue().withMillisOfDay(0)
// 这个月最后一天0点
new DateTime().dayOfMonth().withMaximumValue().withMillisOfDay(0)
// 这个月月初0点
new DateTime().dayOfMonth().withMinimumValue().withMillisOfDay(0)

三、准确使用Joda Time的时间处理类

1、格式化就这么简单

// 格式化时间
DateTime currentDateTime = new DateTime();
currentDateTime.toString("yyyy-MM-dd HH:mm:ss");

// 指定时区格式化
String format = "yyyy-MM-dd HH:mm:ss";
DateTime dateTime = new DateTime();
dateTime.toString(format, Locale.US);

// 格式化时分秒(单位毫秒并且最大可格式23:59:59,超出将报错)
int millis = 120000;
LocalTime localTime = new LocalTime().withMillisOfDay(millis);
localTime.toString("HH:mm:ss");

2 如果业务只需要日期,请使用LocalDate,因为LocalDate仅仅关心日期,更专业,也减少了不必要的资源消耗;如果业务只关心时间,那么使用LocalTime。例如

LocalDate localDate = new LocalDate();
LocalTime localTime = new LocalTime();
System.out.println(localDate);
// 2017-09-14
System.out.println(localTime);
//10:54:14.506

3 如果业务需要日期时间都要使用,那么可以使用LocalDateTime, DateTime这两个类,它们都是线程安全的同时都是不可变的,使用起来不用担心出问题。

LocalDateTime是与时区无关的。
DateTime是与时区相关的一个国际标准时间。
使用的时候根据自己的需要选择,详细的解释看官方文档吧

4 再次提醒要使用DateTimeConstants类定义好的常量,避免重复造轮子。下面给出DateTimeConstants类的常量(也不多),不在解释,望名知义。

 

// 月份
public static final int JANUARY = 1;
public static final int FEBRUARY = 2;
public static final int MARCH = 3;
public static final int APRIL = 4;
public static final int MAY = 5;
public static final int JUNE = 6;
public static final int JULY = 7;
public static final int AUGUST = 8;
public static final int SEPTEMBER = 9;
public static final int OCTOBER = 10;
public static final int NOVEMBER = 11;
public static final int DECEMBER = 12;
// 星期
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
public static final int THURSDAY = 4;
public static final int FRIDAY = 5;
public static final int SATURDAY = 6;
public static final int SUNDAY = 7;
// 上午&下午
public static final int AM = 0;
public static final int PM = 1;
// 公元前...年(基督之前...年)
public static final int BC = 0;
// 公元前
public static final int BCE = 0;
// 公元...年(原义为主的纪年)
public static final int AD = 1;
// 基督纪元,公元
public static final int CE = 1;
// 1秒对应毫秒数
public static final int MILLIS_PER_SECOND = 1000;
// 1分钟对应秒数
public static final int SECONDS_PER_MINUTE = 60;
// 1分钟对应毫秒数
public static final int MILLIS_PER_MINUTE = 60000;
// 1小时对应分钟数
public static final int MINUTES_PER_HOUR = 60;
// 1小时对应的秒数
public static final int SECONDS_PER_HOUR = 3600;
// 1小时对应的毫秒数
public static final int MILLIS_PER_HOUR = 3600000;
// 1天对应的小时
public static final int HOURS_PER_DAY = 24;
// 1天对应的分钟数
public static final int MINUTES_PER_DAY = 1440;
// 1天对应的秒数
public static final int SECONDS_PER_DAY = 86400;
// 1天对应的毫秒数
public static final int MILLIS_PER_DAY = 86400000;
// 1周对应的天数
public static final int DAYS_PER_WEEK = 7;
// 1周对应的小时
public static final int HOURS_PER_WEEK = 168;
// 1周对应的分钟
public static final int MINUTES_PER_WEEK = 10080;
// 1周对应的秒数
public static final int SECONDS_PER_WEEK = 604800;
// 1周对应的毫秒数
public static final int MILLIS_PER_WEEK = 604800000;

 

Locale

1  Locale 介绍

Locale 表示地区。每一个Locale对象都代表了一个特定的地理、政治和文化地区。

在操作 Date, Calendar等表示日期/时间的对象时,经常会用到;因为不同的区域,时间表示方式都不同。

下面说说Locale对象的3种常用创建方式

1 获取默认的Locale

使用方法:

Locale locale = Locale.getDefault()

2 直接使用Locale的静态对象

Locale.java中提供了以下静态对象

public static final Locale CANADA
public static final Locale CANADA_FRENCH
public static final Locale CHINA
public static final Locale CHINESE
public static final Locale ENGLISH
public static final Locale FRANCE
public static final Locale FRENCH
public static final Locale GERMAN
public static final Locale GERMANY
public static final Locale ITALIAN
public static final Locale ITALY
public static final Locale JAPAN
public static final Locale JAPANESE
public static final Locale KOREA
public static final Locale KOREAN
public static final Locale PRC
public static final Locale ROOT
public static final Locale SIMPLIFIED_CHINESE
public static final Locale TAIWAN
public static final Locale TRADITIONAL_CHINESE
public static final Locale UK
public static final Locale US

使用方法:下面的Locale对象是对应 “中国(大陆)”的

Locale locale = Locale.SIMPLIFIED_CHINESE

3 通过Locale的构造函数创建Locale对象

Locale的构造函数共有3个。如下:

Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)

使用方法:

Locale local = new Locale("zh", "CN");

Locale类支持非常多的国家和地区。我们可以通过以下方法,查看Locale支持的全部区域:

Locale[] ls = Locale.getAvailableLocales();

for (Locale locale:ls) {
    System.out.println("locale :"+locale);
}

输入结果如下
All Locales: ja_JP, es_PE, en, ja_JP_JP, es_PA, sr_BA, mk, es_GT, ar_AE, no_NO, sq_AL, bg, ar_IQ, ar_YE, hu, pt_PT, el_CY, ar_QA, mk_MK, sv, de_CH, en_US, fi_FI, is, cs, en_MT, sl_SI, sk_SK, it, tr_TR, zh, th, ar_SA, no, en_GB, sr_CS, lt, ro, en_NZ, no_NO_NY, lt_LT, es_NI, nl, ga_IE, fr_BE, es_ES, ar_LB, ko, fr_CA, et_EE, ar_KW, sr_RS, es_US, es_MX, ar_SD, in_ID, ru, lv, es_UY, lv_LV, iw, pt_BR, ar_SY, hr, et, es_DO, fr_CH, hi_IN, es_VE, ar_BH, en_PH, ar_TN, fi, de_AT, es, nl_NL, es_EC, zh_TW, ar_JO, be, is_IS, es_CO, es_CR, es_CL, ar_EG, en_ZA, th_TH, el_GR, it_IT, ca, hu_HU, fr, en_IE, uk_UA, pl_PL, fr_LU, nl_BE, en_IN, ca_ES, ar_MA, es_BO, en_AU, sr, zh_SG, pt, uk, es_SV, ru_RU, ko_KR, vi, ar_DZ, vi_VN, sr_ME, sq, ar_LY, ar, zh_CN, be_BY, zh_HK, ja, iw_IL, bg_BG, in, mt_MT, es_PY, sl, fr_FR, cs_CZ, it_CH, ro_RO, es_PR, en_CA, de_DE, ga, de_LU, de, es_AR, sk, ms_MY, hr_HR, en_SG, da, mt, pl, ar_OM, tr, th_TH_TH, el, ms, sv_SE, da_DK, es_HN

下面选择其中的两个进行说明,如何利用它们来创建Locale对象:
例如,第一个输出是“ja_JP”。

其中,ja代表“语言”,这里指日语;“JP”代表国家,这里指日本。
我们可以通过如下方法,创建“语言是日语,国家是日本的Locale对象”。

Locale locale = new Locale("ja", "JP");

例如,第三个输出是“en”

其中,en代表“语言”,这里指英语。
我们可以通过如下方法,创建“语言是英文的Locale对象”。

Locale locale = new Locale("en");

Locale 函数列表

// Locale的构造函数
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)

Object                         clone()
boolean                     equals(Object object)
static Locale[]             getAvailableLocales()
String                         getCountry()
static Locale                 getDefault()
String                         getDisplayCountry(Locale locale)
final String                 getDisplayCountry()
final String                 getDisplayLanguage()
String                         getDisplayLanguage(Locale locale)
String                         getDisplayName(Locale locale)
final String                 getDisplayName()
final String                 getDisplayVariant()
String                         getDisplayVariant(Locale locale)
String                         getISO3Country()
String                         getISO3Language()
static String[]             getISOCountries()
static String[]             getISOLanguages()
String                         getLanguage()
String                         getVariant()
synchronized int             hashCode()
synchronized static void     setDefault(Locale locale)
final String                 toString()

 

 


2 Locale示例

下面通过示例演示在Date中使用Locale的。
参考代码如下(LocaleTest.java):

import java.util.Locale;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

/**
 * Locale 的测试程序
 *
 * @author skywang
 * @email kuiwu-wang@163.com
 */
public class LocaleTest {

    public static void main(String[] args) {
        // 2种不同的Locale的创建方法
        testDiffDateLocales();

        // 显示所有的Locales
        testAllLocales();
    }

    /**
     *  2种不同的Locale的创建方法
     */
    private static void testDiffDateLocales() {
        // date为2013-09-19 14:22:30
        Date date = new Date(113, 8, 19, 14, 22, 30);

        // 创建“简体中文”的Locale
        Locale localeCN = Locale.SIMPLIFIED_CHINESE;
        // 创建“英文/美国”的Locale
        Locale localeUS = new Locale("en", "US");

        // 获取“简体中文”对应的date字符串
        String cn = DateFormat.getDateInstance(DateFormat.MEDIUM, localeCN).format(date);
        // 获取“英文/美国”对应的date字符串
        String us = DateFormat.getDateInstance(DateFormat.MEDIUM, localeUS).format(date);

        System.out.printf("cn=%s\nus=%s\n", cn, us);
    }

    /**
     *  显示所有的Locales
     */
    private static void testAllLocales() {
        Locale[] ls = Locale.getAvailableLocales();

        System.out.print("All Locales: ");
        for (Locale locale:ls) {
            System.out.printf(locale+", ");
        }
        System.out.println();
    }
}

 

java8新特性之 日期和时间

 

在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,java.utiljava.sql中,都包含Date类,如果要进行时间格式化,还需要java.text.DateFormat类处理。同时java.util.Date中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端。并且也借鉴了第三方日期库joda很多的优点。

java.time包下主要包含下面几个主要的类:
Instant:时间戳
Duration:持续时间,时间差
LocalDate:只包含日期,比如:2019-02-02
LocalTime:只包含时间,比如:23:12:10
LocalDateTime:包含日期和时间,比如:2019-02-02 23:14:21
Period:时间段
ZoneOffset:时区偏移量,比如:+8:00
ZonedDateTime:带时区的时间
Clock:时钟,比如获取目前美国纽约的时间

获取某个日期的操作

1)获取某月份的第一天的两种方法

     LocalDate localDate =LocalDate.now(); 
     LocalDate firstDay =  localDate.with(TemporalAdjusters.firstDayOfMonth());
     LocalDate firstDay =  localDate.withDayOfMonth(1);

2)取某月的最后一天 

     LocalDate localDate =LocalDate.now();
        LocalDate lastDay =  localDate.with(TemporalAdjusters.lastDayOfMonth());

3)当前日期+1天

     LocalDate localDate =LocalDate.now();
     LocalDate tomorrow =  localDate.plusDays(1);

 4)指定日期

     LocalDate localDate =LocalDate.of(2019,01,01);
        System.out.println(localDate);

5) 获取当天日期

        LocalDate localDate =LocalDate.now();

        System.out.println(localDate);

 获取某个时间(不含日期)

  1当前时间

        LocalTime localTime =LocalTime.now();
  2 获取当前时间 不带毫秒      
        LocalTime localTime1 =LocalTime.now().withNano(0);

  3 获取指定时间 指定时分秒
        LocalTime time =LocalTime.of(0,0,20);

  4 字符串转化为 时间
        LocalTime time1 =LocalTime.parse("10:20:20");
  5   指定时间 加减特定时间间隔获取另外一个指定时间
        LocalTime add =localTime.plus(1, ChronoUnit.HOURS);
        LocalTime add1 =localTime.plusHours(1);

日期前后比较

     LocalDate today = LocalDate.now();
        LocalDate specifyDate = LocalDate.of(2018, 12, 20);
        System.out.println(today.isBefore(specifyDate)); //false
        System.out.println(today.isAfter(specifyDate)); //true 

获取不同时区的时间

    1 查看当前的时区
        ZoneId defaultZone = ZoneId.systemDefault();
        System.out.println(defaultZone); //Asia/Shanghai
      
      2 获取美国纽约当前的时间
        ZoneId usa = ZoneId.of("America/New_York");
        LocalDateTime usaTime = LocalDateTime.now(usa);
        System.out.println(usaTime); //2019-02-01T21:28:31.471
      
      3 获取美国纽约的时间
        ZonedDateTime americaZoneDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
        System.out.println(americaZoneDateTime); 
        //2019-02-02T11:03:05.926+08:00[Asia/Shanghai]

比较两个日期之前时间差

     LocalDate today = LocalDate.now();
        LocalDate date = LocalDate.of(2018, 12, 30);
        System.out.println(date.until(today, ChronoUnit.DAYS)); 
      

日期时间格式化

在java8之前,我们进行时间格式化主要是使用SimpleDateFormat

而在java8中,主要是使用DateTimeFormatter,

java8中,预定义了一些标准的时间格式,我们可以直接将时间转换为标准的时间格式

 

1 日期转化为字符串

    LocalDateTime dateTime = LocalDateTime.now();
    String strDate1 = dateTime.format(DateTimeFormatter.BASIC_ISO_DATE);    // 20190202
    String strDate2 = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE);    // 2019-02-02
    String strDate3 = dateTime.format(DateTimeFormatter.ISO_LOCAL_TIME);    // 11:29:43.08
    String strDate4 = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));   // 2019-02-02
    String strDate5 = dateTime.format(DateTimeFormatter.ofPattern("今天是:YYYY年 MMMM dd日 E", Locale.CHINESE)); // 今天是:2019年 二月 02日 星期六
2 字符串解析日期对象 
    String strDate1 = "2019-02-02";
       LocalDate date = LocalDate.parse(strDate1, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

    String strDate2 = "2019-02-02 12:30:05";
    LocalDateTime dateTime1 = LocalDateTime.parse(strDate2, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

 

 3  字符串解析日期对象 

     DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY年MM月dd日00:00:00");
        System.out.println(dateTimeFormatter.format(LocalDate.now()));//2019年02月02日00:00:00

 

Date类于java8时间类相互转化

 

在转换中,我们需要注意,因为java8之前Date是包含日期和时间的,而LocalDate只包含日期,LocalTime只包含时间,所以与Date在互转中,必定会丢失日期或者时间,或者会使用起始时间。如果转LocalDateTime,就不存在信息误差。

     1 Date与Instant的相互转化
        Instant instant  = Instant.now();
        Date date = Date.from(instant);
        Instant instant2 = date.toInstant();
        System.out.println(instant);//2019-02-02T03:22:18.387Z
        System.out.println(date);//Sat Feb 02 11:22:18 CST 2019
        System.out.println(instant2);//2019-02-02T03:22:18.387Z

     2 Date转为LocalDateTime
        Date date2 = new Date();
        LocalDateTime localDateTime2 = LocalDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault());
        System.out.println(date2);//Sat Feb 02 11:24:24 CST 2019
        System.out.println(localDateTime2);//2019-02-02T11:24:24.213
 
      3 LocalDateTime转Date
        LocalDateTime localDateTime3 = LocalDateTime.now();
        Instant instant3 = localDateTime3.atZone(ZoneId.systemDefault()).toInstant();
        Date date3 = Date.from(instant);
        System.out.println(localDateTime3);//2019-02-02T11:25:38.524
        System.out.println(instant3);//2019-02-02T03:25:38.524Z
        System.out.println(date3);//Sat Feb 02 11:25:38 CST 2019
 
     4 LocalDate转Date,因为LocalDate不包含时间,所以转Date时,会默认转为当天的起始时间,00:00:00
        LocalDate localDate4 = LocalDate.now();
        Instant instant4 = localDate4.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
        Date date4 = Date.from(instant);
        System.out.println(localDate4);//2019-02-02
        System.out.println(instant4);//2019-02-01T16:00:00Z
        System.out.println(date4);//Sat Feb 02 11:26:35 CST 2019

 

生日检查或账单检查

  我们在购物时注册会员时都会有生日祝福,例如,用户的生日为1996-03-19,如果今天是2018-03-19,那么今天就是用户的生日(按公历/身份证日期来算),那么通过java8新的日期库,我们该如何来进行实现呢?

1

2

3

4

   LocalDate birthday = LocalDate.of(1996, 03, 19);

   MonthDay birthdayMd = MonthDay.of(birthday.getMonth(), birthday.getDayOfMonth());

   MonthDay today = MonthDay.from(LocalDate.of(2018, 03, 19));

   System.out.println(today.equals(birthdayMd));<br>输出结果为 :true <br><br>

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值