基于Calendar获取当前时间的性能比较

除了获取时间用Date和SimperFormat,还可用Calendar类方法获取时间。

一、Calendar 类常用的获取时间以及时区的方法:

Calendar calendar = Calendar.getInstance();
System.out.println("目前时间: " + calendar.getTime());
System.out.println("Calendar时区: " + calendar.getTimeZone().getID());
System.out.println("user.timezone: " + System.getProperty("user.timezone"));
System.out.println("user.country: " + System.getProperty("user.country"));
System.out.println("默认时区: " + TimeZone.getDefault().getID());

运行结果:

目前时间: Tue May 28 23:09:31 CST 2019
Calendar时区: Asia/Shanghai
user.timezone: Asia/Shanghai
user.country: CN
默认时区: Asia/Shanghai

二、获取当前时间性能比较

long start1 = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(sdf.format(new Date()));// new Date()为获取当前系统时间
long end1 = System.currentTimeMillis();
System.out.println((end1 - start1) + "ms");

运行结果:

2019-05-28 23:14:14
55ms

long start2 = System.currentTimeMillis();
Calendar calendar = Calendar.getInstance();//可以对每个时间域单独修改
System.out.println(calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + calendar.get(Calendar.DATE) + " " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND));
long end2 = System.currentTimeMillis();
System.out.println((end2 - start2) + "ms");

运行结果:

2019-4-28 23:15:22
36ms

显然,第二种的Calendar获取当前时间的性能比SimpleDateFormat的要快

三、获取零点时间的性能比较

long start3 = System.currentTimeMillis();
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date zero = calendar.getTime();
long end3 = System.currentTimeMillis();
System.out.println(zero);
System.out.println((end3 - start3) + "ms");

运行结果:

Tue May 28 00:00:00 CST 2019
34ms

long start4 = System.currentTimeMillis();
long current = System.currentTimeMillis();
long zero = current/(1000*3600*24)*(1000*3600*24) - TimeZone.getDefault().getRawOffset();
System.out.println(zero);
long end4 = System.currentTimeMillis();
System.out.println((end4 - start4) + "ms");

运行结果:

1558972800000
11ms

这里current表示毫秒,那么除以了1000 * 3600 * 24得到天数,但是可能不是整数天,但是因为t是long型,那么小数部分没有了,再去乘以1000 * 3600 * 24,就变成整数天数所对应的毫秒了。

TimeZone.getDefault().getRawOffset() 计算夏令时和返回当前时区与格林尼治时间的偏差。

显然,这里获取零点时间强烈推荐第二种方法,性能比第一种高三倍左右。

Calendar获取当前年份、月份、日期

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestDate {
    /**
     * 获取当前年份、月份、日期
     * @param args
     */
    public static void main(String[] args) {
        Calendar cale = null;
        cale = Calendar.getInstance();
        int year = cale.get(Calendar.YEAR);
        int month = cale.get(Calendar.MONTH) + 1;
        int day = cale.get(Calendar.DATE);
        int hour = cale.get(Calendar.HOUR_OF_DAY);
        int minute = cale.get(Calendar.MINUTE);
        int second = cale.get(Calendar.SECOND);
        int dow = cale.get(Calendar.DAY_OF_WEEK);
        int dom = cale.get(Calendar.DAY_OF_MONTH);
        int doy = cale.get(Calendar.DAY_OF_YEAR);  

        System.out.println("Current Date: " + cale.getTime());
        System.out.println("Year: " + year);
        System.out.println("Month: " + month);
        System.out.println("Day: " + day);
        System.out.println("Hour: " + hour);
        System.out.println("Minute: " + minute);
        System.out.println("Second: " + second);
        System.out.println("Day of Week: " + dow);
        System.out.println("Day of Month: " + dom);
        System.out.println("Day of Year: " + doy);  

        // 获取当月第一天和最后一天
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String firstday, lastday;
        // 获取前月的第一天
        cale = Calendar.getInstance();
        cale.add(Calendar.MONTH, 0);
        cale.set(Calendar.DAY_OF_MONTH, 1);
        firstday = format.format(cale.getTime());
        // 获取前月的最后一天
        cale = Calendar.getInstance();
        cale.add(Calendar.MONTH, 1);
        cale.set(Calendar.DAY_OF_MONTH, 0);
        lastday = format.format(cale.getTime());
        System.out.println("本月第一天和最后一天分别是 : " + firstday + " and " + lastday);  

        // 获取当前日期字符串
        Date d = new Date();
        System.out.println("当前日期字符串1:" + format.format(d));
        System.out.println("当前日期字符串2:" + year + "/" + month + "/" + day + " "
                + hour + ":" + minute + ":" + second);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java中Calendar时间操作常用方法详解

    本文实例为大家分享了Calendar时间操作常用方法,具体内容如下 package test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Date和Calendar常用方法,Date很多方法已经弃用,因此以Calendar为主 * * @author tuzongxun123 * */ public class DateAndCalendarTest { p

  • Java Calendar类的时间操作

    Java Calendar 类时间操作,这也许是创建日历和管理最简单的一个方案,示范代码很简单,演示了获取时间,日期时间的累加和累减,以及比较. 注意事项: Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示. 而 Calendar.DAY_OF_WEEK 定义和值如下: Calendar.SUNDAY = 1 Calendar.MONDAY = 2 Calendar.TUESDAY = 3 Calendar.WEDNESDAY = 4 Calend

  • Java中获取时间戳的三种方式对比实现

    Java中获取时间戳 三种方式对比 最近项目开发过程中发现了项目中获取时间戳的业务.而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式. 1.System.currentTimeMillis() System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短.开发中如果设计到效率问题,推荐使用此种方式获取. System.currentTimeMillis() 2.new Date().getTime() 除了Sys

  • 使用java的Calendar对象获得当前日期

    思路: 先获得当前季度的开始和结束日期,在当前日期的基础上往前推3个月即上个季度的开始和结束日期 /** * @param flag true:开始日期:false:结束日期 * @return */ public static String getLastQuarterTime(boolean flag){ SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat longSdf

  • 基于Calendar获取当前时间的性能比较

    除了获取时间用Date和SimperFormat,还可用Calendar类方法获取时间. 一.Calendar 类常用的获取时间以及时区的方法: Calendar calendar = Calendar.getInstance(); System.out.println("目前时间: " + calendar.getTime()); System.out.println("Calendar时区: " + calendar.getTimeZone().getID())

  • 基于python获取本地时间并转换时间戳和日期格式

    附上代码与运行结果截图: import time # 获取当前时间 now = time.localtime() # 格式化日期 now_ = time.strftime('%Y-%m-%d %H:%M:%S', now) # 获取当前时间,以时间戳格式 now_stamp = time.time() # 日期转时间戳 change_to_stamp = time.mktime(time.strptime(now_, "%Y-%m-%d %H:%M:%S")) # 时间戳转日期 cha

  • Android 用Time和Calendar获取系统当前时间源码分享(年月日时分秒周几)

    概述 用Time和Calendar获取系统当前时间(年月日时分秒周几) 效果图 源码: import android.app.Activity; import android.os.Bundle; import android.text.format.Time; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; import java.util.Calen

  • Android获取系统时间以及网络时间

    项目开发中,很多时候会用到android的时间,罗列一下获取的时间的方式,和大家共同学习进步 一.获取系统时间  1.通过Calendar类来获取系统当前的时间 Calendar calendar = Calendar.getInstance(); long unixTime = calendar.getTimeInMillis();//这是时间戳 Logger.i(TAG,"calendar--->>>"+"当前时间为:" + calendar.

  • Linux下用C获取当前时间

    Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) void getNowTime() { timespec time; clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数 tm nowTime; localtime_r(&time.tv_sec, &nowtime); char current[1024]; sprintf(current, "%04d%0

  • java获取Date时间的各种方式汇总

    java获取Date时间的各种方式为大家分享如下 常用的时间获取方式 public class DateUtils { /** * 获取时间戳 * 输出结果:1438692801766 */ @Test public void getTimeStamp() { Date date = new Date(); long times = date.getTime(); System.out.println(times); //第二种方法: new Date().getTime(); } /** *

  • Java获取UTC时间的方法详解

    本文实例讲述了Java获取UTC时间的方法.分享给大家供大家参考,具体如下: 取得本地时间: java.util.Calendar cal = java.util.Calendar.getInstance(); 取得指定时区的时间: java.util.TimeZone zone = java.util.TimeZone.getTimeZone("GMT-8:00″); java.util.Calendar cal = java.util.Calendar.getInstance(zone);

  • C# 当前系统时间获取及时间格式详解

    C# 当前系统时间获取及时间格式 最近学习C# 的知识,对获取系统时间和时间格式进行了总结,这是本文在网上整理的详细资料,大家看下! --DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 取当前年月日时分秒 currentTime=System.DateTime.Now; 取当前年 int 年=currentTime.Year; 取当前月 int 月=currentTime.Month; 取当前日 int 日=curr

  • Android获取系统时间的多种方法

    Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现. 现总结如下: 方法一: void getTime1(){ long time=System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd

随机推荐