• 时区的转化


    public static Date getGMTDate(String date, String timeZone, String format) {
            TimeZone gmtTime = TimeZone.getTimeZone(timeZone);
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            sdf.setTimeZone(gmtTime);
            Date gmtDate = null;
            try {
                gmtDate = sdf.parse(date);
            } catch (ParseException e) {
                LOGGER.error("DateUtils.getGMTdate get exception is :{}", e);
            }
            return gmtDate;
        }
    public class DateUtils {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(DateUtils.class);
    
        /**
         * @param str
         *            want to convert to date format
         * @return
         */
        public static String getTimeFormat(String str) {
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat(str);
            return sdf.format(date);
        }
    
        /**
         * change date format
         * 
         * @return dateStr
         */
        public static String getTimeWithMillisecondFormat() {
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            return sdf.format(date);
        }
    
        public static String getDateFormat() {
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            return sdf.format(date);
        }
    
        public static Date getGMTDate(String date, String timeZone, String format) {
            TimeZone gmtTime = TimeZone.getTimeZone(timeZone);
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            sdf.setTimeZone(gmtTime);
            Date gmtDate = null;
            try {
                gmtDate = sdf.parse(date);
            } catch (ParseException e) {
                LOGGER.error("DateUtils.getGMTdate get exception is :{}", e);
            }
            return gmtDate;
        }
    
        public static Date getGMTDate(Date date, String timeZone, String format) {
            TimeZone gmtTime = TimeZone.getTimeZone(timeZone);
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            sdf.setTimeZone(gmtTime);
            SimpleDateFormat sdf1 = new SimpleDateFormat(format);
            Date gmtDate = null;
            try {
                gmtDate = sdf1.parse(sdf.format(date));
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return gmtDate;
        }
    
    }
    View Code

    方式二:应用java8新特新:

    final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) )

    4.3 Date/Time API(JSR 310)

    Java 8引入了新的Date-Time API(JSR 310)来改进时间、日期的处理。时间和日期的管理一直是最令Java开发者痛苦的问题。java.util.Date和后来的java.util.Calendar一直没有解决这个问题(甚至令开发者更加迷茫)。

    因为上面这些原因,诞生了第三方库Joda-Time,可以替代Java的时间管理API。Java 8中新的时间和日期管理API深受Joda-Time影响,并吸收了很多Joda-Time的精华。新的java.time包包含了所有关于日期、时间、时区、Instant(跟日期类似但是精确到纳秒)、duration(持续时间)和时钟操作的类。新设计的API认真考虑了这些类的不变性(从java.util.Calendar吸取的教训),如果某个实例需要修改,则返回一个新的对象。

    我们接下来看看java.time包中的关键类和各自的使用例子。首先,Clock类使用时区来返回当前的纳秒时间和日期。Clock可以替代System.currentTimeMillis()TimeZone.getDefault()

    // Get the system clock as UTC offset 
    final Clock clock = Clock.systemUTC();
    System.out.println( clock.instant() );
    System.out.println( clock.millis() );

    这个例子的输出结果是:

    2014-04-12T15:19:29.282Z
    1397315969360

    第二,关注下LocalDateLocalTime类。LocalDate仅仅包含ISO-8601日历系统中的日期部分;LocalTime则仅仅包含该日历系统中的时间部分。这两个类的对象都可以使用Clock对象构建得到。

    // Get the local date and local time
    final LocalDate date = LocalDate.now();
    final LocalDate dateFromClock = LocalDate.now( clock );
    
    System.out.println( date );
    System.out.println( dateFromClock );
    
    // Get the local date and local time
    final LocalTime time = LocalTime.now();
    final LocalTime timeFromClock = LocalTime.now( clock );
    
    System.out.println( time );
    System.out.println( timeFromClock );

    上述例子的输出结果如下:

    2014-04-12
    2014-04-12
    11:25:54.568
    15:25:54.568

    LocalDateTime类包含了LocalDate和LocalTime的信息,但是不包含ISO-8601日历系统中的时区信息。这里有一些关于LocalDate和LocalTime的例子

    // Get the local date/time
    final LocalDateTime datetime = LocalDateTime.now();
    final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );
    
    System.out.println( datetime );
    System.out.println( datetimeFromClock );

    上述这个例子的输出结果如下:

    2014-04-12T11:37:52.309
    2014-04-12T15:37:52.309

    如果你需要特定时区的data/time信息,则可以使用ZoneDateTime,它保存有ISO-8601日期系统的日期和时间,而且有时区信息。下面是一些使用不同时区的例子:

    // Get the zoned date/time
    final ZonedDateTime zonedDatetime = ZonedDateTime.now();
    final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock );
    final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) );
    
    System.out.println( zonedDatetime );
    System.out.println( zonedDatetimeFromClock );
    System.out.println( zonedDatetimeFromZone );

    这个例子的输出结果是:

    2014-04-12T11:47:01.017-04:00[America/New_York]
    2014-04-12T15:47:01.017Z
    2014-04-12T08:47:01.017-07:00[America/Los_Angeles]

    最后看下Duration类,它持有的时间精确到秒和纳秒。这使得我们可以很容易得计算两个日期之间的不同,例子代码如下:

    // Get duration between two dates
    final LocalDateTime from = LocalDateTime.of( 2014, Month.APRIL, 16, 0, 0, 0 );
    final LocalDateTime to = LocalDateTime.of( 2015, Month.APRIL, 16, 23, 59, 59 );
    
    final Duration duration = Duration.between( from, to );
    System.out.println( "Duration in days: " + duration.toDays() );
    System.out.println( "Duration in hours: " + duration.toHours() );

    这个例子用于计算2014年4月16日和2015年4月16日之间的天数和小时数,输出结果如下:

    Duration in days: 365
    Duration in hours: 8783

    对于Java 8的新日期时间的总体印象还是比较积极的,一部分是因为Joda-Time的积极影响,另一部分是因为官方终于听取了开发人员的需求。如果希望了解更多细节,可以参考官方文档

     
  • 相关阅读:
    【YbtOJ#20068】连通子图
    【YbtOJ#20067】糖果分配
    【GMOJ6801】模拟patrick
    【GMOJ6800】模拟spongebob
    【洛谷P4449】于神之怒加强版
    【洛谷P3601】签到题
    【洛谷P2408】不同子串个数
    【洛谷P3809】【模板】后缀排序
    【JZOJ1753】锻炼身体
    【GMOJ1164】求和
  • 原文地址:https://www.cnblogs.com/lshan/p/9207239.html
Copyright © 2020-2023  润新知