您的位置:首页 > 科技 > IT业 > 互联网行业环境分析_多地进一步优化防控措施_百度网盘搜索神器_流量推广平台

互联网行业环境分析_多地进一步优化防控措施_百度网盘搜索神器_流量推广平台

2024/12/26 23:42:15 来源:https://blog.csdn.net/weixin_42369079/article/details/142344909  浏览:    关键词:互联网行业环境分析_多地进一步优化防控措施_百度网盘搜索神器_流量推广平台
互联网行业环境分析_多地进一步优化防控措施_百度网盘搜索神器_流量推广平台

我们先来介绍一下与时间相关的基础知识。
GMT - 格林尼治标准时间(Greenwich Mean Time),简称GMT,实际上与世界时UT(universal time )基本一致。
UTC - 协调世界时(Universal Time Coordinated),简称UTC,比GMT更精确。
LT - 本地时间(Local Time),简称LT,表示所在时区的时间。
CST - 北京时间(China standard Time),中国标准时间。

时区:整个地球分为二十四时区,每个时区都有自己的本地时间。UTC或GMT与LT有如下换算关系:LT = UTC + 时区差。
东区是加相应的时区差,西区是减时区差。例如,CST-北京时间,在时区划分上,属东八区,比UTC协调世界时早8小时,记为UTC+8。

在这里插入图片描述

时间戳:UTC时间的原点是:1970年1月1日00:00:00。在中国,CST-北京时间比UTC协调世界时早8小时。因此,在中国,时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总秒数,它也被称为Unix时间戳(unix Timestamp),广泛的应用在知识产权保护、合同签字、金融帐务、电子报价投标、股票交易等方面,作为时间标记。

另外,还有三个关于时间单位的换算公式:
(1)1秒 = 1000毫秒;
(2)1毫秒 = 1000微秒;
(3)1微秒 = 1000纳秒。

“逝者如斯夫,不舍昼夜”是《论语·子罕》中记载的孔子的名言。孔子在河边看到河水不断流淌,有感而发,形容时间就像这河水一样,不分昼夜地流逝,提醒人们要珍惜时间。这句话不仅表达了时间的流逝不可逆转,也寓意着人们应该珍惜每一刻,不要虚度光阴。
在计算机世界,我们是以1970 年 1 月 1 日 00:00:00作为基准时间,是UTC时间的原点。时间计算最常用的度量单位是毫秒(1秒的千分之一),时间是一维空间,如下图所示:
在这里插入图片描述
我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得当前时刻的“时刻数值”,代码如下:

	long now = System.currentTimeMillis();

这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。JDK 8 以前的时间日期相关类的关系如下所示:
在这里插入图片描述

一、 日期类Date

JDK 8以前的版本,通常用Date类(java.util.Date)来处理日期、时间:包括创建日期、时间对象;获取系统当前日期和时间等。
Date类用于表示日期和时间,是公历(阳历)表示法,表示特定的瞬间,精确到毫秒。Date类表示的日期和我们对日期的认知略有差异:

  • Date类定义的日期有一个起始点,是UTC时间:1970年1月1日00:00:00。
  • 年份由整数表示,但是Date类的年份是从1900年开始算起的,若Date类的年份为y,那么实际年份应当是 y + 1900。
  • 月份也由整数表示,Date类(java.util.Date)的月份是从0至11的整数表示,一月是0、二月是1,由此类推十二月是11。
  • 日期(一月中的某天)按通常方式由整数 1 至 31 表示,这点和我们的认知一致。
  • 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点,这点也和我们的认知一致。
  • 分钟按通常方式由 0 至 59的整数表示。

时间类Date有两个常用方法:
Date() 分配一个Date对象,并初始化此对象为系统当前的日期和时间,可以精确到毫秒。
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

二、DateFormat类和SimpleDateFormat类

DateFormat类的作用:
把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。
DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。

日期时间格式化占位符的含义:
在这里插入图片描述
Date日期时间类及其日期时间格式测试:

import java.text.SimpleDateFormat;
import java.util.Date;
public class testDate {public static void main(String[] args) throws Exception  {// 定义输出格式   SimpleDateFormat sdf = null;sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(); //获取系统当前日期System.out.println(date); //打印当前年月日System.out.println(date.getTime());//打印当前时间// 将日期转化为字符串String str = sdf.format(date);System.out.println(str);//把字符串转化为日期Date对象sdf = new SimpleDateFormat("yyyy年MM月dd日");String string = "2024年01月18日";date = sdf.parse(string);System.out.println(date); }
}

测试效果结果:
在这里插入图片描述

三、Calendar日历类

Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
注意 月份的表示,一月是0,二月是1,以此类推,12月是11。 因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY、FEBRUARY等等。

Java语言对日期时间类Date的设计很差,日期的格式处理定义在java.text包中,而且java.util.Date是非线程安全的。
另外,在java.sql 包中有java.util.Date类的三个子类:
(1)java.sql.Date 只表示日期(JDBC日期转义格式:yyyy-mm-dd)
(2)java.sql.Time 只表示时间(JDBC时间转义格式:hh:mm:ss)
(3)java.sql.Timestamp 时间戳同时包含日期和时间信息(JDBC时间戳转义格式:yyyy-mm-dd hh:mm:ss.fffffffff)

JDK1.1之后,日期操作一般使用Calendar类,而字符串的转化使用DateFormat类的实现类SimpleDateFormat。

下面请看一个Calendar 类的演示例程:

/**** @author QiuGen* @description  CalenderDemos* @date 2024/9/18* ***/
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalenderDemos {public static void main(String[] args){Calendar c =  new GregorianCalendar(); //创建公历日历prnWeek(c);c.set(2023, 8, 16);//设置为2023年 9月 16日prnWeek(c);}private static void prnWeek(Calendar c) {int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DAY_OF_MONTH);//int week = c.get(Calendar.DAY_OF_WEEK);String week = getWeek( c.get(Calendar.DAY_OF_WEEK) );System.out.println(year+"年 "+month+"月 "+day+"日 "+week);}private static String getWeek(int week) {String[] weeks = { "","星期日" ,"星期一" ,"星期二" ,
"星期三" ,"星期四" ,"星期五" ,"星期六" };     return weeks[week];	}
}

测试结果:
在这里插入图片描述
四、Java 8的日期时间Date-Time API

JDK 1.0发布的日期时间类java.util.Date类有很大缺陷,自从JDK 1.1引入日历类Calendar之后Date类的很多方法就被弃用。然而日历类Calendar也不尽如人意。它们都是线程不安全的,而且都有不能处理闰秒(每隔2天,多出1s)等缺陷。
Java 8又引入了新的Date-Time API(JSR 310),也就是java.time包,来改善日期、时间的处理。
新版的日期时间处理类主要包含三个核心类:

  • LocalDate:表示日期(年-月-日),是不可变日期时间对象,采用了系统的默认时区。只包含日期,可以获取日期字段。
  • LocalTime:表示一天中的时间,只包含时间,可以获取时间字段。
  • LocalDateTime:包含了日期和时间,可以获取日期和时间字段,表示本地日期时间,默认使用系统时区。LocalDateTime相当于LocalDate + LocalTime的组合体。

新版的日期时间处理类还包含了一些辅助类:

  • Instant 时间戳类。Instant表示时间的瞬间,和前面Date类类似。相较于System.currentTimeMillis()只能获取到【毫秒】,Instant可以更为精确的获取到【纳秒】。Instant类提供了大量与Date类相互转换的方法。
  • Clock 时钟类。用于获取当时的时间戳,或当前时区下的日期时间信息。以前使用System.currentTimeMillis()和TimeZone.getDefault()方法的地方都可使用Clock来替换。
  • DateTimeFormatter 日期时间格式化类。

凡是需要显示日期和时间的地方,都可根据用户需求按一定样式规则进行格式化。下面是常用的日期时间格式化样式中用到的占位符:
在这里插入图片描述
常用的日期、时间格式化的样式:
年份:(占位符,用大小写皆可)
YYYY :4位数字表示的年份,例如:2023
yyyy :4位数字表示的年份,例如:2023
YY :2位数字表示的年份,例如:23
月份:(占位符M,必须用大写)
MM :2位数字表示的月份,例如:01表示一月,12表示十二月
MMM :英文缩写形式的月份,例如:Jan表示一月,Dec表示十二月
MMMM :完整的英文月份,例如:January表示一月,December表示十二月
日期:(DD大写,dd小写,皆可)
DD dd :2位数字表示的日期,例如:01表示1号,31表示31号
星期几:(占位符d,必须用小写)
ddd :英文缩写形式的星期几,例如:Mon表示星期一,Sun表示星期日
dddd :完整的英文星期几,例如:Monday表示星期一,Sunday表示星期日
时间:
HH :24小时制的小时,例如:00表示午夜12点,23表示晚上11点
hh :12小时制的小时,例如:01表示上午1点,12表示下午12点
mm :分钟,例如:00表示整点,30表示30分钟
ss :秒,例如:00表示整分,59表示59秒
S:毫秒,当前秒的毫秒数。
am/pm :上午/下午标识,例如:AM表示上午,PM表示下午。大小写皆可。

ISO本地化日期样式: yyyy-MM-dd
ISO本地化时间样式: HH:mm:ss

三个日期时间处理核心类都提供了静态now()方法来获取当前的系统日期或时间。例如:LocalDate类可用静态的now()方法来获取当前日期:
LocalDate localDate = LocalDate.now();

还定义了大量的日期时间处理方法,例如:通过加减计算日期的方法
在当前日期加上一定时间值计算今后的某个时间日期的方法:
localDate.plusDays(daysToAdd);
localDate.plusMonths(monthsToAdd);
localDate.plusYears(yearsToAdd);
在当前日期上减去一定时间值计算以前的某个时间日期的方法:
localDate.minusDays(daysToSubtract);
localDate.minusMonths(monthsToSubtract);
localDate.minusYears(yearsToSubtract);

Date-Time API中很多类都提供了闰年和平年的判断方法isLeapYear()。

老式使用Date()格式化显示的这种写法:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("【" + format.format(new Date()) + "】" );

与下面使用Date-Time API的写法,功能完全相同:

		String dateTime = LocalDate.now() + " " + LocalTime.now();System.out.println("【" + dateTime +"】");

例程DateTimeAPITest.java演示一些常用的方法,源代码如下:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class DateTimeAPITest {public static void testLocalDate() {LocalDate date = LocalDate.now(); //获取系统当前日期System.out.println(date);   //打印当前年月日System.out.println(date.getYear());//获取当前年份System.out.println(date.getMonth().getValue());//获取当前月份序号System.out.println(date.getDayOfMonth());//获取今天几号DateTimeFormatter f1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");System.out.println(date.format(f1));}public static void testLocalTime() {LocalTime time = LocalTime.now();System.out.println(time);//获取当前的时间System.out.println(time.getHour());//获取当前时间的小时System.out.println(time.getMinute());//获取当前时间的分钟System.out.println(time.getSecond());//获取当前时间的秒DateTimeFormatter f1 = DateTimeFormatter.ofPattern("HH:mm:ss");System.out.println(time.format(f1));}public static void testLocalDateTime() {LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime);//获取当前的年月日时分秒System.out.println(dateTime.getYear());//获取当前年份System.out.println(dateTime.getMonth().getValue());//获取当前月System.out.println(dateTime.getDayOfMonth());//获取当前几日System.out.println(dateTime.getHour());//获取当前小时System.out.println(dateTime.getMinute());//获取当前分钟System.out.println(dateTime.getSecond());System.out.println(dateTime.getDayOfWeek());//今天是星期几DateTimeFormatter f1 = null;f1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println(dateTime.format(f1));}public static void main(String[] args)  {//testLocalDate();//testLocalTime();testLocalDateTime();}
}	//例程DateTimeAPITest.java结束。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com