一、Calendar类

从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

1、使用Calendar类代表当前时间

Calendar c = Calendar.getInstance();

由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

2、使用Calendar类代表指定的时间

Calendar c1 = Calendar.getInstance();

c1.set(2009, 3 - 1, 9);

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

set方法的声明为:

public final void set(int year,int month,int date)

以上示例代码设置的时间为2009年3月9日,其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。

如果只设定某个字段,例如日期的值,则可以使用如下set方法:

public void set(int field,int value)

在该方法中,参数field代表要设置的字段的类型,常见类型如下:

Calendar.YEAR——年份

Calendar.MONTH——月份

Calendar.DATE——日期

Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同

Calendar.HOUR——12小时制的小时数

Calendar.HOUR_OF_DAY——24小时制的小时数

Calendar.MINUTE——分钟

Calendar.SECOND——秒

Calendar.DAY_OF_WEEK——星期几

后续的参数value代表,设置成的值。例如:

c1.set(Calendar.DATE,10);

该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。

3、获得Calendar类中的信息

Calendar c2 = Calendar.getInstance();

//年份

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

//月份

int month = c2.get(Calendar.MONTH) + 1;

//日期

int date = c2.get(Calendar.DATE);

//小时

int hour = c2.get(Calendar.HOUR_OF_DAY);

//分钟

int minute = c2.get(Calendar.MINUTE);

//秒

int second = c2.get(Calendar.SECOND);

//星期几

int day = c2.get(Calendar.DAY_OF_WEEK);

System.out.println("年份:" + year);

System.out.println("月份:" + month);

System.out.println("日期:" + date);

System.out.println("小时:" + hour);

System.out.println("分钟:" + minute);

System.out.println("秒:" + second);

System.out.println("星期:" + day);

使用Calendar类中的get方法可以获得Calendar对象中对应的信息,get方法的声明如下:

public int get(int field)

其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。需要说明的是,获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。在Calendar类中,周日是1,周一是2,周二是3,依次类推。

4、其它方法说明

其实Calendar类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。

a、add方法

public abstract void add(int field,int amount)

该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少时amount的值为负。

例如在计算一下当前时间100天以后的日期,代码如下:

Calendar c3 = Calendar.getInstance();

c3.add(Calendar.DATE, 100);

int year1 = c3.get(Calendar.YEAR);

//月份

int month1 = c3.get(Calendar.MONTH) + 1;

//日期

int date1 = c3.get(Calendar.DATE);

System.out.println(year1 + "年" + month1 + "月" + date1 + "日");

这里add方法是指在c3对象的Calendar.DATE,也就是日期字段上增加100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的日期,例如程序的输出结果可能为:

2009年6月17日

b、after方法

public boolean after(Object when)

该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。例如:

Calendar c4 = Calendar.getInstance();

c4.set(2009, 10 - 1, 10);

Calendar c5 = Calendar.getInstance();

c5.set(2010, 10 - 1, 10);

boolean b = c5.after(c4);

System.out.println(b);

在该示例代码中对象c4代表的时间是2009年10月10号,对象c5代表的时间是2010年10月10号,则对象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。

另外一个类似的方法是before,该方法是判断当前日期对象是否位于另外一个日期对象之前。

c、getTime方法

public final Date getTime()

该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。

类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:

public final void setTime(Date date)

转换的示例代码如下:

Date d = new Date();

Calendar c6 = Calendar.getInstance();

//Calendar类型的对象转换为Date对象

Date d1 = c6.getTime();

//Date类型的对象转换为Calendar对象

Calendar c7 = Calendar.getInstance();

c7.setTime(d);

5、Calendar对象和相对时间之间的互转

Calendar c8 = Calendar.getInstance();

long t = 1252785271098L;

//将Calendar对象转换为相对时间

long t1 = c8.getTimeInMillis();

//将相对时间转换为Calendar对象

Calendar c9 = Calendar.getInstance();

c9.setTimeInMillis(t1);

在转换时,使用Calendar类中的getTimeInMillis方法可以将Calendar对象转换为相对时间。在将相对时间转换为Calendar对象时,首先创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis方法设置时间即可。

二、项目笔记

一、项目团队构成

1.前端开发工程师

(1)把设计(效果)图切(图)成HTML+CSS+image+js+.......

(2)使用前端框架(Vue.js、Angular、React)开发前端应用(手机、桌面),需要服务端提供接口

2.美术设计师(美工)

(1)把产品经理/项目经理设计的原型转变成效果图(App、桌面网站、系统)

(2)设计宣传资料(产品、公司、项目)

(3)杂事(名片、PPT....)

3.项目经理

(1)管理项目需求、与客户及项目团队沟通、指定项目计划、监管项目进度

(2)一个项目经理可能同时管理多个项目

4.产品经理

(1)自己研发产品的公司通常有产品经理,规划、设计产品(面向什么用户、满足什么需要、如何在竞争中胜出、如何盈利)

(2)互联网公司一般都有产品经理

5.部门经理

(1)团队的组建(面试、招聘、优化)、培训、日常行政事务(请假审批、绩效考核等)

6.测试工程师

(1)找BUG、管理BUG

(2)写文档(测试文档、产品说明书《使用手册、帮助文档》)

 

三、绝对路径和相对路径

绝对路径是以/开头,或者以协议开头

绝对路径是以主机根目录为固定参照点

/api/user/login

http://www.baidu.com/abc

相对路径是以字母
数字等非/开头,或者以.  ..开头

相对路径以当前目录为参照点

user/login

../login

使用绝对路径的代码可以在项目中随意移动而不用修改地址

使用相对路径的代码随位置时需要检查地址是否正确

四、在JSP中使用绝对路径首先要解决应用路径(Content root)的问题

1.获取应用路径可以使用代码块定义一个变量

2.使用JSTL

<link ..... href=”<c:url value=”/css/index.css>”>

c:url是一个特殊标签 ,它可以将value中url变成包含应用路径的绝对地址

3.步骤

(1)导入jar包

(2)把标签库tld文件都导入项目中(WEB-INF)

(3)在web.xml中配置JSTL

   (4)在JSP页面上添加taglib指令

           taglib指令实际上命名空间的声明

 

   4.格式

prefix=“c” :命名空间的前缀,前缀名称可以随意写,越短越好

           uri=“uri”uri不是一个真实网址,只是一个以网址形式存在的唯一名称

           

           当页面上写下面的标签时,需要找到url标签的解释者

<c:url value=””>

url标签由谁负责处理呢?就需找url标签的命名空间c,而c在
页面开头

由taglib指令声明,而且它与后面uri关联起来,uri再jar包中由相应声明

uri在jar包中有对应声明(tld中声明相关的标签名、以及对应的类)找到类

之后,会调用类中渲染方法生成HTML

5.JSTL使用的是严格XML语法,标签需要闭合!

1、 <c:url ...../>

2、<c:when .....>

........

</c:when ....>

6.JSTL常用的标签大类是

核心标签:用来控制HTML的生成,提供了分支判断、循环生成复杂HTML的功能(根据数据生成)、还包括生成URL及跳转

格式化标签:用来格式化数据

函数:用来截取字符串等

返回的是表单里的key值

 五、JNDI

( Java Naming and DirectoryInterface )Java命名和目录接口

JDK只定义规范,而没有给出具体的实现

具体的实现由Tomcat等应用容器实现

名字和目录服务的目标是:

通过提供字符串形式的名字即可获得想要对象,对象已经被初始化好

初始化时通过配置文件中提供配置信息实现的

不需要程序员自己new一个对象,也不需要程序员自己给构造方法传参,也不需要调用setter给属性赋值

它带来的好处是:

将对象创建需要的信息转移到配置文件中,从java代码中脱离出来

方便之后的修改(不需要修改和编译代码)

JNDI底层有很多提供程序,可以支持创建多种类型的对象,提供程序是可以扩展的

六、XML   

1. 可扩展标记语言  Extensible Markup Language

2. 标签名可以自定义的标记语言

3. 标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。

4. XML语法严格,如果语法不正确,就无法通过验证器验证

5. 使用XML解析器解析数据时也会出错

种,帮助程序员定义新标签

问:既然XML可以自定义标签,那么如果出现A程序员定义标签和B程序员定义的标签同名,怎么解决?

解决方法:标签都定义在命名空间中,命名空间相当于java中的包。

每个XML文档都有一个默认命名空间,默认命名空间中的标签不用加前缀,当引入其他命名空间的标签时,必须加前缀

扩展:

1.关于DTD:

DTD(英文:Document Type Definition,中文:文档类型定义)是一套关于标记符的语法规则,是标准通用标记语言和扩展标记语言1.0版规格的一部分,是文档的验证机制,也是一个美国信息交换标准代码文本文件。它是一种保证标准通用标记语言、可扩展标记语言文档格式正确的有效方法,可通过比较文档和文档类型定义文件来看文档是否符合规范,元素和标签使用是否正确。文件实例提供应用程序一个数据交换的格式。因为文档类型定义正是让标准通用标记语言、可扩展标记语言文件能够成为数据交换标准,所以不同的公司只需定义好标准文档类型定义即可,各公司都能依文档类型定义建立文档实例,并进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。

2.关于Schema

Schema是用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。

用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。可以理解成与DTD(文档类型定义)功能差不多,但是Schema在当前的WEB开发环境下优越很多。

  因为它本身就是一个有效的XML文档,因而可以更直观地了解XML的结构。除此之外,Schema支持命名空间,内置多种简单和复杂的数据类型,并支持自定义数据类型。由于存在这么多的优点,所以Schema渐渐成为XML应用的统一规范。

XML实体符号

XML Entities(Entity)

因为XML使用了< > &

当节点内部(标签内容区域)需要表示< >
这种语法符号时,需要实体代码,而不能直接写语法符号

错误示例:<expr>a<b</expr>

正确示例:<expr>a&It;b</expr>

实体符号以&开头

& ---->  &

从Servlet向JSP或Servlet传数据

使用转发跳转时,可以将数据放在request对象中

request.setAttribute(“key”,value);    value可以是对象!

使用重定向时,需要将数据放在URL中

response.sendRedirect(“..../index.jsp?errorMessage=XXXXX”);

这种方式只能传字符串,而且不能太长

try  with  resources

Java 7 支持新语法

可以自动帮助我们调用close()方法,close()方法在AutoCloseable这个接口中定义的

try(资源1;资源2;资源3){

//资源3关闭

//资源2关闭

//资源1关闭

}

catch(){

}

WEB-INF、META-INF中的资源不能通过浏览器直接访问!!!

Java基础之Calendar类、JNDI之XML的更多相关文章

  1. java基础系列--Calendar类

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7136575.html 1.Calendar概述 Java官方推荐使用Calendar来替换 ...

  2. Java基础(38):Calendar类的应用(优于Date类)

    Calendar 类的应用 Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calen ...

  3. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  4. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  5. Java基础教程——Date类和Calendar类

    Date类和Calendar类都是关于日期的类,都在java.util包中,使用时需要import. Date java.util.Date类的对象用来表示时间和日期,用得最多的是获取系统当前日期和时 ...

  6. JAVA基础之Date类、DateFormat类及Calendar类

    个人理解: 关于Date类,进行截取或者转换时一定要注意好数据类型,long类型后面要加上L.时间的原点是1970年.用DateFormat则完成日期与文本之间的转换,特别注意的是:月是用M,时是用H ...

  7. 【Java基础】常用类

    常用类 字符串相关的类 String类:代表字符串,使用一对 "" 引起来表示. public final class String implements java.io.Seri ...

  8. java基础系列--Date类

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7126930.html 1.Date类概述 Date类是从JDK1.1就开始存在的老类,其提 ...

  9. Java基础:Object类中的equals与hashCode方法

    前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象   对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...

随机推荐

  1. ctags简明用法

    1.安装: sudo apt install ctags 2.生成tags文件: //进入目标目录 ctags -R . 3.在vim中设置tags的绝对目录,这样就可以在任何子目录使用了. :set ...

  2. 每日英语:Air Pollution From Coal Use Cuts Lifespans in China, Study Shows

    Air pollution from coal combustion likely cut life expectancy in parts of China by more than five ye ...

  3. ny33 蛇形填数

    蛇形填数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 1 ...

  4. 基于jQuery动画二级下拉导航菜单

    春节回来给大家分享一款基于jQuery动画二级下拉导航菜单.鼠标经过的时候以动画的形式出现二级导航.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id=" ...

  5. springboot集成jdbcTemplate

    这里使用springboot自带的jdbcTemplate连接mysql数据库 1. 添加依赖包 <!-- jdbc --> <dependency> <groupId& ...

  6. keepalived管理LVS文件详解

    #全局设置,只设置一个 全局路由就可以,全局路由不能重复唯一标识. global_defs { router_id LVS_01 #全局路由ID,唯一不能重复 } #实例 vrrp_instance ...

  7. selenuim爬虫实战(日lofter.com)

    LOFTER是网易公司2011年8月下旬推出的一款轻博客产品. LOFTER专注于为用户提供简约.易用.有品质.重原创的博客工具.原创社区,以及有品质的手机博客应用. LOFTER首次采用独立域名,口 ...

  8. postgreSQL php及客户端

    yum install php-pgsql “conf/config.inc.php”) $conf['servers'][0]['host'] = 'localhost'; and $conf['e ...

  9. Latex之希腊字母表 花体字母 实数集

    花体字母 \mathcal{x} 实数集字母 \mathbb{R} 转自:http://blog.csdn.net/lanchunhui/article/details/49819445 拉丁字母是2 ...

  10. 【BZOJ】1621: [Usaco2008 Open]Roads Around The Farm分岔路口(dfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1621 这题用笔推一下就懂了的.... 当2|(n-k)时,才能分,否则不能分. 那么dfs即可.. ...