精华内容
下载资源
问答
  • Java日期时间使用总结一、Java中的日期概述日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。...

    Java日期时间使用总结

    一、Java中的日期概述

    日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。

    在Java中,操作日期主要涉及到一下几个类:

    1、java.util.Date

    类 Date 表示特定的瞬间,精确到毫秒。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。Date 中的把日期解释为年、月、日、小时、分钟和秒值的方法已废弃。

    2、java.text.DateFormat(抽象类)

    DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。

    3、java.text.SimpleDateFormat(DateFormat的直接子类)

    SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。

    SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。

    4、java.util.Calendar(抽象类)

    Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

    与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

    5、java.util.GregorianCalendar(Calendar的直接子类)

    GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。

    GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家是在 1582 年 10 月 15 日创立,在其他国家要晚一些)。可由调用方通过调用 setGregorianChange() 来更改起始日期。

    二、java.util.Date的使用

    1、java.util.Date的API简介

    类 java.util.Date 表示特定的瞬间,精确到毫秒。提供了很多的方法,但是很多已经过时,不推荐使用,下面仅仅列出没有过时的方法:

    构造方法摘要

    -------------

    Date()

    分配 Date 对象并用当前时间初始化此对象,以表示分配它的时间(精确到毫秒)。

    Date(long date)

    分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

    方法摘要

    -------------

    boolean after(Date when)

    测试此日期是否在指定日期之后。

    boolean before(Date when)

    测试此日期是否在指定日期之前。

    Object clone()

    返回此对象的副本。

    int compareTo(Date anotherDate)

    比较两个日期的顺序。

    boolean equals(Object obj)

    比较两个日期的相等性。

    long getTime()

    返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

    int hashCode()

    返回此对象的哈希码值。

    void setTime(long time)

    设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。

    String toString()

    把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:

    dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

    mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。

    dd 是一月中的某一天(01 至 31),显示为两位十进制数。

    hh 是一天中的小时(00 至 23),显示为两位十进制数。

    mm 是小时中的分钟(00 至 59),显示为两位十进制数。

    ss 是分钟中的秒数(00 至 61),显示为两位十进制数。

    zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。

    yyyy 是年份,显示为 4 位十进制数。

    下面是一个Date类的综合实例:

    import java.util.Date;

    /**

    * Created by IntelliJ IDEA.

    * User: leizhimin

    * Date: 2007-11-30

    * Time: 8:45:44

    * 日期测试

    */

    public class TestDate {

    public static void main(String args[]) {

    TestDate nowDate = new TestDate();

    nowDate.getSystemCurrentTime();

    nowDate.getCurrentDate();

    }

    /**

    * 获取系统当前时间

    * System.currentTimeMillis()返回系统当前时间,结果为1970年1月1日0时0分0秒开始,到程序执行取得系统时间为止所经过的毫秒数

    * 1秒=1000毫秒

    */

    public void getSystemCurrentTime() {

    System.out.println("----获取系统当前时间----");

    System.out.println("系统当前时间 = " + System.currentTimeMillis());

    }

    /**

    * 通过Date类获取当前日期和当前时间

    * date.toString()把日期转换为dow mon dd hh:mm:ss zzz yyyy

    */

    public void getCurrentDate() {

    System.out.println("----获取系统当前日期----");

    //创建并初始化一个日期(初始值为当前日期)

    Date date = new Date();

    System.out.println("现在的日期是 = " + date.toString());

    System.out.println("自1970年1月1日0时0分0秒开始至今所经历的毫秒数 = " + date.getTime());

    }

    }

    运行结果:

    ----获取系统当前时间----

    系统当前时间 = 1196413077278

    ----获取系统当前日期----

    现在的日期是 = Fri Nov 30 16:57:57 CST 2007

    自1970年1月1日0时0分0秒开始至今所经历的毫秒数 = 1196413077278

    Process finished with exit code 0

    2、java.text.DateFormat抽象类的使用

    DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。

    DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。

    DateFormat 可帮助进行格式化并分析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。

    要格式化一个当前语言环境下的日期,可使用某个静态工厂方法:

    myString = DateFormat.getDateInstance().format(myDate);

    如果格式化多个日期,那么获得该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家约定的信息了。

    DateFormat df = DateFormat.getDateInstance();

    for (int i = 0; i < myDate.length; ++i) {

    output.println(df.format(myDate[i]) + "; ");

    }

    要格式化不同语言环境的日期,可在 getDateInstance() 的调用中指定它。

    DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);

    还可使用 DateFormat 进行分析。

    myDate = df.parse(myString);

    使用 getDateInstance 来获得该国家的标准日期格式。另外还提供了一些其他静态工厂方法。使用 getTimeInstance 可获得该国家的时间格式。使用 getDateTimeInstance 可获得日期和时间格式。可以将不同选项传入这些工厂方法,以控制结果的长度(从 SHORT 到 MEDIUM 到 LONG 再到 FULL)。确切的结果取决于语言环境,但是通常:

    SHORT 完全为数字,如 12.13.52 或 3:30pm

    MEDIUM 较长,如 Jan 12, 1952

    LONG 更长,如 January 12, 1952 或 3:30:32pm

    FULL 是完全指定,如 Tuesday, April 12, 1952 AD 或 3:30:42pm PST。

    如果愿意,还可以在格式上设置时区。如果想对格式化或分析施加更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法所获得的 DateFormat 强制转换为 SimpleDateFormat。这适用于大多数国家;只是要记住将其放入一个 try 代码块中,以防遇到特殊的格式。

    还可以使用借助 ParsePosition 和 FieldPosition 的分析和格式化方法形式来:逐步地分析字符串的各部分。 对齐任意特定的字段,或者找出字符串在屏幕上的选择位置。

    DateFormat 不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须保持外部同步。

    3、java.text.SimpleDateFormat(DateFormat的直接子类)的使用

    SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。

    SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式化程序。可以根据需要使用 applyPattern 方法来修改格式模式。有关使用这些方法的更多信息,请参阅 DateFormat。

    日期和时间模式

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

    定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):

    字母

    日期或时间元素

    表示

    示例

    G

    Era标志符

    AD

    y

    1996; 96

    M

    年中的月份

    July; Jul; 07

    w

    年中的周数

    27

    W

    月份中的周数

    2

    D

    年中的天数

    189

    d

    月份中的天数

    10

    F

    月份中的星期

    2

    E

    星期中的天数

    Tuesday; Tue

    a

    Am/pm标记

    PM

    H

    一天中的小时数(0-23)

    0

    k

    一天中的小时数(1-24)

    24

    K

    am/pm中的小时数(0-11)

    0

    h

    am/pm中的小时数(1-12)

    12

    m

    小时中的分钟数

    30

    s

    分钟中的秒数

    55

    S

    毫秒数

    978

    z

    时区

    Pacific Standard Time; PST; GMT-08:00

    更多的参考信息可以查看JDK API文档,下面给出一个综合实例:

    import java.util.Date;

    import java.util.Locale;

    import java.text.DateFormat;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    /**

    * Created by IntelliJ IDEA.

    * User: leizhimin

    * Date: 2007-11-30

    * Time: 11:20:58

    * To change this template use File | Settings | File Templates.

    */

    public class TestSimpleDateFormat {

    public static void main(String args[]) throws ParseException {

    TestSimpleDateFormat test = new TestSimpleDateFormat();

    test.testDateFormat();

    }

    public void testDateFormat() throws ParseException {

    //创建日期

    Date date = new Date();

    //创建不同的日期格式

    DateFormat df1 = DateFormat.getInstance();

    DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE");

    DateFormat df3 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);     //产生一个指定国家指定长度的日期格式,长度不同,显示的日期完整性也不同

    DateFormat df4 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 EE", Locale.CHINA);

    DateFormat df5 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EEEEEE", Locale.US);

    DateFormat df6 = new SimpleDateFormat("yyyy-MM-dd");

    DateFormat df7 = new SimpleDateFormat("yyyy年MM月dd日");

    //将日期按照不同格式进行输出

    System.out.println("-------将日期按照不同格式进行输出------");

    System.out.println("按照Java默认的日期格式,默认的区域                      : " + df1.format(date));

    System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE ,系统默认区域      :" + df2.format(date));

    System.out.println("按照日期的FULL模式,区域设置为中文                      : " + df3.format(date));

    System.out.println("按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE ,区域为中文 : " + df4.format(date));

    System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE ,区域为美国        : " + df5.format(date));

    System.out.println("按照指定格式 yyyy-MM-dd ,系统默认区域                  : " + df6.format(date));

    //将符合该格式的字符串转换为日期,若格式不相配,则会出错

    Date date1 = df1.parse("07-11-30 下午2:32");

    Date date2 = df2.parse("2007-11-30 02:51:07 星期五");

    Date date3 = df3.parse("2007年11月30日 星期五");

    Date date4 = df4.parse("2007年11月30日 02时51分18秒 星期五");

    Date date5 = df5.parse("2007-11-30 02:51:18 Friday");

    Date date6 = df6.parse("2007-11-30");

    System.out.println("-------输出将字符串转换为日期的结果------");

    System.out.println(date1);

    System.out.println(date2);

    System.out.println(date3);

    System.out.println(date4);

    System.out.println(date5);

    System.out.println(date6);

    }

    }

    运行结果:

    -------将日期按照不同格式进行输出------

    按照Java默认的日期格式,默认的区域                      : 07-11-30 下午5:04

    按照指定格式 yyyy-MM-dd hh:mm:ss EE ,系统默认区域      :2007-11-30 05:04:10 星期五

    按照日期的FULL模式,区域设置为中文                      : 2007年11月30日 星期五

    按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE ,区域为中文 : 2007年11月30日 05时04分10秒 星期五

    按照指定格式 yyyy-MM-dd hh:mm:ss EE ,区域为美国        : 2007-11-30 05:04:10 Friday

    按照指定格式 yyyy-MM-dd ,系统默认区域                  : 2007-11-30

    -------输出将字符串转换为日期的结果------

    Fri Nov 30 14:32:00 CST 2007

    Fri Nov 30 02:51:07 CST 2007

    Fri Nov 30 00:00:00 CST 2007

    Fri Nov 30 02:51:18 CST 2007

    Fri Nov 30 02:51:18 CST 2007

    Fri Nov 30 00:00:00 CST 2007

    Process finished with exit code 0

    4、java.util.Calendar(抽象类)

    java.util.Calendar是个抽象类,是系统时间的抽象表示,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

    与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

    一个Calendar的实例是系统时间的抽象表示,从Calendar的实例可以知道年月日星期月份时区等信息。Calendar类中有一个静态方法get(int x),通过这个方法可以获取到相关实例的一些值(年月日星期月份等)信息。参数x是一个产量值,在Calendar中有定义。

    Calendar中些陷阱,很容易掉下去:

    1、Calendar的星期是从周日开始的,常量值为0。

    2、Calendar的月份是从一月开始的,常量值为0。

    3、Calendar的每个月的第一天值为1。

    5、java.util.GregorianCalendar(Calendar的直接子类)

    GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。结合Calendar抽象类使用。

    下面给出一个综合实例看看Calendar类的用法:

    import java.util.*;

    import java.text.SimpleDateFormat;

    /**

    * Created by IntelliJ IDEA.

    * User: leizhimin

    * Date: 2007-11-30

    * Time: 15:06:57

    * Calendar的使用测试

    */

    public class TestCalendar {

    public static void main(String args[]) {

    TestCalendar testCalendar = new TestCalendar();

    testCalendar.testCalendar();

    }

    public void testCalendar() {

    //创建Calendar的方式

    Calendar now1 = Calendar.getInstance();

    Calendar now2 = new GregorianCalendar();

    Calendar now3 = new GregorianCalendar(2007, 10, 30);

    Calendar now4 = new GregorianCalendar(2007, 10, 30, 15, 55);      //陷阱:Calendar的月份是0~11

    Calendar now5 = new GregorianCalendar(2007, 10, 30, 15, 55, 44);

    Calendar now6 = new GregorianCalendar(Locale.US);

    Calendar now7 = new GregorianCalendar(TimeZone.getTimeZone("GMT-8:00"));

    //通过日期和毫秒数设置Calendar

    now2.setTime(new Date());

    System.out.println(now2);

    now2.setTimeInMillis(new Date().getTime());

    System.out.println(now2);

    //定义日期的中文输出格式,并输出日期

    SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 E", Locale.CHINA);

    System.out.println("获取日期中文格式化化输出:" + df.format(now5.getTime()));

    System.out.println();

    System.out.println("--------通过Calendar获取日期中年月日等相关信息--------");

    System.out.println("获取年:" + now5.get(Calendar.YEAR));

    System.out.println("获取月(月份是从0开始的):" + now5.get(Calendar.MONTH));

    System.out.println("获取日:" + now5.get(Calendar.DAY_OF_MONTH));

    System.out.println("获取时:" + now5.get(Calendar.HOUR));

    System.out.println("获取分:" + now5.get(Calendar.MINUTE));

    System.out.println("获取秒:" + now5.get(Calendar.SECOND));

    System.out.println("获取上午、下午:" + now5.get(Calendar.AM_PM));

    System.out.println("获取星期数值(星期是从周日开始的):" + now5.get(Calendar.DAY_OF_WEEK));

    System.out.println();

    System.out.println("---------通用星期中文化转换---------");

    String dayOfWeek[] = {"", "日", "一", "二", "三", "四", "五", "六"};

    System.out.println("now5对象的星期是:" + dayOfWeek[now5.get(Calendar.DAY_OF_WEEK)]);

    System.out.println();

    System.out.println("---------通用月份中文化转换---------");

    String months[] = {"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};

    System.out.println("now5对象的月份是: " + months[now5.get(Calendar.MONTH)]);

    }

    }

    运行结果:

    java.util.GregorianCalendar[time=1196414388324,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2007,MONTH=10,WEEK_OF_YEAR=48,WEEK_OF_MONTH=5,DAY_OF_MONTH=30,DAY_OF_YEAR=334,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=19,SECOND=48,MILLISECOND=324,ZONE_OFFSET=28800000,DST_OFFSET=0]

    java.util.GregorianCalendar[time=1196414388324,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2007,MONTH=10,WEEK_OF_YEAR=48,WEEK_OF_MONTH=5,DAY_OF_MONTH=30,DAY_OF_YEAR=334,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=19,SECOND=48,MILLISECOND=324,ZONE_OFFSET=28800000,DST_OFFSET=0]

    获取日期中文格式化化输出:2007年11月30日 03时55分44秒 星期五

    --------通过Calendar获取日期中年月日等相关信息--------

    获取年:2007

    获取月(月份是从0开始的):10

    获取日:30

    获取时:3

    获取分:55

    获取秒:44

    获取上午、下午:1

    获取星期数值(星期是从周日开始的):6

    ---------通用星期中文化转换---------

    now5对象的星期是:五

    ---------通用月份中文化转换---------

    now5对象的月份是: 十一月

    Process finished with exit code 0

    三、总结

    Java中日期的经常有一下五个方面:

    1、创建日期

    2、日期格式化显示

    3、日期的转换(主要是和字符串之间的相互转换)

    4、日期中年、月、日、时、分、秒、星期、月份等获取。

    5、日期的大小比较、日期的加减。

    这也是学习java日期操作的难点和关键,掌握了这些,日期问题一般难不倒你。

    关于日期的大小比较和加减在API文档中都有详尽的描述,鉴于时间关系,在此不做介绍。祝各位博友周末愉快!

    展开全文
  • 2020-05-12T01:31:48+00:00 转换成时间或时间戳都行[face]monkey:2.gif[/face]
  • 首先 Mon Dec 09 22:06:24 格林尼治标准时间+0800 2013 字段一个格林尼治标准时间时间,一般情况下字段中不会含有中文,对于这种格式有两种解决方法 1剔除中文字符串 public static String ...


    private Date formatDate(String string) {
    		SimpleDateFormat resultSdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    		SimpleDateFormat resultSdfdate = new SimpleDateFormat("yyyy-MM-dd");
    		if (string != null) {
    			if (string.contains("CST")) {
    				long d2 = Date.parse(string);
    				Date datetime = new Date(d2);
    
    				return datetime;
    
    			} else if (string.contains("Z")) {
    				SimpleDateFormat sdf = new SimpleDateFormat(
    						"yyyy-MM-dd'T'hh:mm:ss'.'sss'Z'");
    				java.util.Date datetime;
    				try {
    					datetime = sdf.parse(string);
    					return (Date) datetime;
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    
    			} else if (string.contains("-")&&string.contains(":")) {
    				Date newDate;
    				try {
    					newDate = resultSdf.parse(string);
    					return newDate;
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			} else if(string.contains("-")&&!string.contains(":")){
    				Date newDate;
    				try {
    					newDate = resultSdfdate.parse(string);
    					return newDate;
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}else {
    				Date longDate = new Date(Long.parseLong(string));
    
    				return longDate;
    			}
    		}
    		return null;
    	}


    上述方法可以转如下格式:

    2014-06-27T08:11:07.168Z


    Fri Aug 15 08:00:37 CST 2014


    1404359095333


    2014-08-29 




    Mask Description
    d Day of the month as digits; no leading zero for single-digit days.
    dd Day of the month as digits; leading zero for single-digit days.
    ddd Day of the week as a three-letter abbreviation.
    dddd Day of the week as its full name.
    m Month as digits; no leading zero for single-digit months.
    mm Month as digits; leading zero for single-digit months.
    mmm Month as a three-letter abbreviation.
    mmmm Month as its full name.
    yy Year as last two digits; leading zero for years less than 10.
    yyyy Year represented by four digits.
    h Hours; no leading zero for single-digit hours (12-hour clock).
    hh Hours; leading zero for single-digit hours (12-hour clock).
    H Hours; no leading zero for single-digit hours (24-hour clock).
    HH Hours; leading zero for single-digit hours (24-hour clock).
    M Minutes; no leading zero for single-digit minutes.
    Uppercase M unlike CF timeFormat's m to avoid conflict with months.
    MM Minutes; leading zero for single-digit minutes.
    Uppercase MM unlike CF timeFormat's mm to avoid conflict with months.
    s Seconds; no leading zero for single-digit seconds.
    ss Seconds; leading zero for single-digit seconds.
    l or L Milliseconds. l gives 3 digits. L gives 2 digits.
    t Lowercase, single-character time marker string: a or p.
    No equivalent in CF.
    tt Lowercase, two-character time marker string: am or pm.
    No equivalent in CF.
    T Uppercase, single-character time marker string: A or P.
    Uppercase T unlike CF's t to allow for user-specified casing.
    TT Uppercase, two-character time marker string: AM or PM.
    Uppercase TT unlike CF's tt to allow for user-specified casing.
    Z US timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. GMT-0500
    No equivalent in CF.
    o GMT/UTC timezone offset, e.g. -0500 or +0230.
    No equivalent in CF.
    S The date's ordinal suffix (st, nd, rd, or th). Works well with d.
    No equivalent in CF.
    '…' or "…" Literal character sequence. Surrounding quotes are removed.
    No equivalent in CF.
    UTC: Must be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The “UTC:” prefix is removed.
    No equivalent in CF.
    Name Mask Example
    default ddd mmm dd yyyy HH:MM:ss Sat Jun 09 2007 17:46:21
    shortDate m/d/yy 6/9/07
    mediumDate mmm d, yyyy Jun 9, 2007
    longDate mmmm d, yyyy June 9, 2007
    fullDate dddd, mmmm d, yyyy Saturday, June 9, 2007
    shortTime h:MM TT 5:46 PM
    mediumTime h:MM:ss TT 5:46:21 PM
    longTime h:MM:ss TT Z 5:46:21 PM EST
    isoDate yyyy-mm-dd 2007-06-09
    isoTime HH:MM:ss 17:46:21
    isoDateTime yyyy-mm-dd'T'HH:MM:ss 2007-06-09T17:46:21
    isoUtcDateTime UTC:yyyy-mm-dd'T'HH:MM:ss'Z' 2007-06-09T22:46:21Z

    格林尼治时间转化详解:

    首先  Mon Dec 09 22:06:24 格林尼治标准时间+0800 2013   字段一个格林尼治标准时间时间,一般情况下字段中不会含有中文,对于这种格式有两种解决方法

    1剔除中文字符串

    public static String convertGMTToLoacale(String gmt){
            String cc = gmt.substring(0, 19) + gmt.substring(33, 38);
            SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy",new Locale("English"));
            try {
                Date date = sdf.parse(cc);
                SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM");
                String result = dateformat.format(date);
                return result;
            } catch (ParseException e) {
            }
            return "";
        }

    2.第二种方法是在不进行字符串剔除的情况下:

    在simpleDateFormat方法中将格式字符串变换为:"EEE MMM dd HH:mm:ss 格林尼治标准时间+0800 yyyy" 就可以了。这样就可一将时间转换为Date类型:
    private DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss 格林尼治标准时间+0800 yyyy",Locale.ENGLISH);



    3.第三种方法:

    String str = "Wed Jun 5 00:00:00 GMT+08:00 2013";//在08与00之间加:
    java.text.SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy",Locale.US);
    System.out.println(sdf.format(new Date()));
    Date d;
    try {
    d = sdf.parse(str);
    sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(sdf.format(d));
    } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }



    4.第四种方法:

     long d2 = Date.parse("Fri Aug 15 08:00:37 CST 2014"); 
    Date datetime=new Date(d2);
           System.out.println(datetime.toLocaleString()); 






    展开全文
  • 首先,将格林尼治时间转换为时间戳:/*** 格林尼治时间转换为时间戳*/public static long iso8601FormateTimeToLong(String time){String formateTime = iso8601ToCustomerDate(time,"yyyy年M月d日 HH:mm:ss");...

    首先,将格林尼治时间转换为时间戳:

    /**

    * 格林尼治时间转换为时间戳

    */

    public static long iso8601FormateTimeToLong(String time){

    String formateTime = iso8601ToCustomerDate(time,"yyyy年M月d日 HH:mm:ss");

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日 HH:mm:ss");

    Date date = null;

    try {

    date = sdf.parse(formateTime);

    } catch (ParseException e) {

    MXLog.e(MXLog.APP_WARN, e);

    }

    return date.getTime();

    }

    然后是时间戳转为格林尼治时间:

    /**

    * 时间戳转成本机时区的格林尼治时间

    * @param date

    * @return

    */

    public static String dateLongToiso8601(long date) {

    DateTime dateTime = new DateTime(date);

    return dateTime.toString("yyyy-MM-dd'T'HH:mm:ssZ");

    }

    根据时间戳判断距离当前时间的时间,和微信朋友圈中的时间类似,其实原理很简单,通过传入的时间和当前时间作比较即可:

    /**

    *  时间

    *  1)0-1min      刚刚

    *  2)1-60min     xx分钟前,如3分钟前

    *  3)1-24h        xx小时前,如2小时前

    *  4)昨天的       昨天+时+分,如,昨天 05:30

    *  5)昨天之前的   月+日+时+分,如,1月3日 05:30

    *  6)非本年       年+月+日+时+分,如2017年1月12日 05:30

    *

    * @param context

    * @param time

    * @return

    */

    public static String formateTime3(Context context,long time){

    boolean isTodayMessage = false;

    Calendar todayBegin = Calendar.getInstance();

    todayBegin.set(Calendar.HOUR_OF_DAY, 0);

    todayBegin.set(Calendar.MINUTE, 0);

    todayBegin.set(Calendar.SECOND, 0);

    Calendar todayEnd = Calendar.getInstance();

    todayEnd.set(Calendar.HOUR_OF_DAY, 23);

    todayEnd.set(Calendar.MINUTE, 59);

    todayEnd.set(Calendar.SECOND, 59);

    Calendar messageTime = Calendar.getInstance();

    messageTime.setTime(new Date(time));

    if (messageTime.before(todayEnd) && messageTime.after(todayBegin)) {

    isTodayMessage = true;

    }

    SimpleDateFormat formatter = null;

    int year = messageTime.get(Calendar.YEAR);

    Calendar currentCalendar = Calendar.getInstance();

    currentCalendar.setTime(new Date(System.currentTimeMillis()));

    int currentYear = currentCalendar.get(Calendar.YEAR);

    if (isTodayMessage) {

    long currentTime = System.currentTimeMillis();

    long duration = currentTime - time;

    if (duration < 60 * 1000 && duration >= 0) {

    //60s以内

    return "刚刚";

    } else if (duration >= 60 * 1000 && duration < 60 * 60 * 1000 ) {

    //大于1分钟,小于1小时

    return duration /60 /1000 + "分钟前";

    } else if (duration >= 3600 * 1000 && duration < 3600 * 24 * 1000) {

    //大于1小时

    return duration / 3600 /1000 + "小时前";

    }

    }else if (isYesterday(time)){

    formatter = new SimpleDateFormat("HH:mm");

    return "昨天" + formatter.format(messageTime.getTime());

    }else if (year != currentYear){

    formatter = new SimpleDateFormat("yyyy年M月d日 HH:mm");

    }else {

    formatter = new SimpleDateFormat("M月d日 HH:mm");

    }

    if (formatter == null){

    return "刚刚";

    }else{

    return formatter.format(messageTime.getTime());

    }

    }

    展开全文
  • 1、格里尼治时间转换 String timeTemp =“2019-07-26T11:27:04.491+0800”; if(StringUtils.isNotBlank(timeTemp)){ try { DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”); Date date = df....

    1、格里尼治时间转换
    String timeTemp =“2019-07-26T11:27:04.491+0800”;
    if(StringUtils.isNotBlank(timeTemp)){
    try {
    DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”);
    Date date = df.parse(timeTemp);
    //yyyyMMddHHmmss
    Long time = DateUtil.dateToLong(date);
    } catch (ParseException e) {
    continue;
    }
    }

    展开全文
  • java 获取标准格林尼治时 标准格林尼治时间 标准时间
  • /*** 时间* 1)0-1min 刚刚* 2)1-60min xx分钟前,如3分钟前* 3)1-24h xx小时前,如2小时前* 4)昨天的 昨天+时+分,如,昨天 05:30* 5)昨天之前的 月+日+时+分,如,1月3日 05:30* 6)非本年 年+月+日+时+分,如2017年...
  • 首先,将格林尼治时间转换为时间戳: /** * 格林尼治时间转换为时间戳 */ public static long iso8601FormateTimeToLong(String time){ String formateTime = iso8601ToCustomerDate(time,"yyyy年M月d日 HH:mm...
  • Thu Mar 07 09:53:21 格林尼治标准时间+0800 2013 转化方法如下: 1 public static String convertGMTToLoacale(String gmt){ 2 String cc = gmt.substring(0, 19) + gmt.substring(33, 38); 3 ...
  • 我需要隐瞒格林威治标准时间(在Android应用中)的毫秒数,例如:1372916493000当我通过此代码将其转换时:Calendar cal = Calendar.getInstance();cal.setTimeZone(TimeZone.getTimeZone("GMT"));cal.setTimeInMillis...
  • 获取格林尼治时间

    2011-11-18 08:27:27
    // JAVA获取世界标准时间:格林尼治时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Etc/Greenwich")); String ...
  • 我可以看到,格林尼治标准时间是Z常数,以指示它是格林尼治标准时间.但是,当我解析GMT字符串时,它仍在打印本地时间.码:SimpleDateFormat outFormat = newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");String ...
  • 1.问题:Calendar中有一个特别烦人的东西,就是格林尼治日历时间(GreGorianCalendar[ ]),ta到底是什么鬼?2.源代码:startCal:"java.util.GregorianCalendar[time=?],areFieldsSet=false,areAllFieldsSet=true,...
  • 首先 Mon Dec 09 22:06:24 格林尼治标准时间+0800 2013 字段一个格林尼治标准时间时间,一般情况下字段中不会含有中文,对于这种格式有两种解决方法 1剔除中文字符串 public static String ...
  • 该方法用于返回当前计算机时间与GML(格林尼治时间)1970年1月1日0时0分0秒所差的毫秒数 例: long m = System.curentTimeMillis(); /** * Java编程入门与应用 P168——例6-8——使用System类的currentTimeMillis...
  • 首先 Mon Dec 09 22:06:24 格林尼治标准时间+0800 2013 字段一个格林尼治标准时间时间,一般情况下字段中不会含有中文,对于这种格式有两种解决方法 1剔除中文字符串 public static String convertGMTToLoacale...
  • import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Time { public static void main(String[]....
  • 时区GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为...
  • 时区GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为...
  • Java处理GMT时间和UTC时间

    万次阅读 2016-01-05 15:28:53
    时间标准简介UTC(世界标准时间) 协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps ... 格林尼治平时(又称格林尼治平均时间格林尼治标准时间,旧译
  • 时区GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为...
  • GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。 UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为...
  • Java是否使用BIOS(基本输入/输出系统)日期时间我确实知道Java格林尼治标准时间1970年1月1日00:00:00为基础以某种方式工作当前的日期和时间。但是到底如何呢?参考方案它询问操作系统,可能询问BIOS,也可能不...
  • 时间种类: 时间标准简介UTC 协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps...格林尼治平时(又称格林尼治平均时间格林尼治标准时间,旧译格林威治...
  • GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。 UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为...
  • java 时间

    2013-08-06 16:06:05
    [code="java"...//格林尼治时间 dr=d.toString();//美国中部时间 dr=d.toLocaleString();//本地时间[/code] [code="java"]DateFormat fmt =new SimpleDateFormat("yyyy-MM...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 222
精华内容 88
关键字:

java格林尼治时间

java 订阅