04 JAVA 常用类补充 Scanner和日历

本文探讨了懒人的日常习惯,如沉迷娱乐节目和通宵达旦,以及如何通过正则表达式、日期处理和日历来提高时间管理能力。文章还提供了关于日期格式转换和日历可视化的实用技巧。

哎哎哎,我好懒啊,整天watch variety shows and stay up all night for nothing meaningful,又没有钱去玩~(天气好热,科科~贱人就是矫情,还不想去找工作,自己这么说自己也是够了,双重人格~)—— bulltrue少年


一、Scanner

Scanner可以从特定文件(我们需要提供文件或者文件路径),输入流,字符串等产生对应值(使用正则表达式parse原语类型和字符串)

主要方法:

- hasNext() 假如输入还有别的token返回布尔值

- hasNext(正则表达式) 假如下个完整的token匹配这个正则表达式返回布尔值

- hasNextLine() 可以加入正则表达式

- hasNextInt() 可以加入正则表达式

- hasNextDouble() 可以加入正则表达式

- String next() 返回下一个token

String next(正则表达式)

- int nextInt() 可以加入正则表达式

- double nextDouble() 可以加入正则表达式

- String nextLine() 返回当前行

- close()

- useDelimiter(分隔符)

import java.util.*;


public class testScanner {
	public static void main(String[] args) {
		String c = "";
		Scanner sc1 = new Scanner(System.in);

		while(sc1.hasNext()){
			c = sc1.next();
			if(c.equals("*")){
				break;
			}
			System.out.println(c);
		}
		sc1.close();
	}
}

结果:

Amy Mark Anna Terrisa *

Amy

Mark

Anna

Terrisa


二、日期

- Date (时刻<->Date对象)

获取一个特定的瞬间时刻(精确到毫秒,long类型,从1970.1.1 00.00.00开始)并构造成Date类型对象

Date() //默认使用当前时间

Date(long)

主要方法:

- long getTime() 返回某个时刻

- setTime(long time) 设置Date对象来表示某个时刻

- boolean after(Date)

- boolean before(Date)

System.currentTimeMillis() 获取当前时刻


- DateFormat(抽象类,字符串<->Date对象)

子类SimpleDateFormat

SimpleDateFormat()

SimpleDateFormat(String pattern)

Date and Time PatternResult
"yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"Wed, Jul 4, '01
"h:mm a"12:08 PM
"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time
"K:mm a, z"0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u"2001-W27-3

- String format(Date)

- Date parse(String)

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class testDate {
	public static void main(String[] args) {
		Date d = new Date();
		long ts = d.getTime();
		
		System.out.println(ts+"--"+System.currentTimeMillis());
		d.setTime(1345777767889L);
		System.out.println(d);
		
		DateFormat df = new SimpleDateFormat("yyyy.MM.dd");
		System.out.println(df.format(d));
		String date = "2015.8.1"; //要注意格式的统一,比如2015-8-1就不可以啦
		try {
			System.out.println(df.parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
结果:

1437999349348--1437999349348

Fri Aug 24 11:09:27 CST 2012

2012.08.24

Sat Aug 01 00:00:00 CST 2015


- Calendar(抽象类)

执行与日期处理有关的操作,它的子类GregorianCalendar表示的是阳历

主要方法:

- Date getTime() 获取表达日历时间值得日期对象

- setTime(Date)

- long getTimeInMillis() 获取表达日历时间的long值

- setTimeInMillis(long)

- getTimeZone() 获取时区

- add(区域,数值)

- set(区域,数值)

- get(区域)

import java.util.*;

public class testCalendar {
	public static void main(String[] args) {
		//Calendar c1 = new GregorianCalendar();
		Calendar c = Calendar.getInstance(); //用默认的timezone和locale来创建日历
		Date date = new Date();
		c.setTime(date);
		System.out.println(c.get(Calendar.DAY_OF_WEEK));	//一周的第几天
		System.out.println(c.get(Calendar.DAY_OF_YEAR));	//一年中的第几天
		System.out.println(c.get(Calendar.DAY_OF_MONTH));	//一月中的第一天
		System.out.println(c.get(Calendar.DATE));	//日期
		System.out.println(c.get(Calendar.HOUR));	//显示目前几点
		System.out.println(c.get(Calendar.YEAR));
		System.out.println(c.get(Calendar.WEEK_OF_MONTH));	//一个月中的第几周
		System.out.println(c.get(Calendar.WEEK_OF_YEAR));	//一年中的第几周
	}
}

习题:可视化日历

import java.text.*;
import java.util.*;

public class VisualCalendar {
	public static void main(String[] args) {
		System.out.print("输入日期,格式为YYYY-MM-DD:");
		Scanner sn = new Scanner(System.in);
		String s = sn.next();
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		
		try {
			Date date = df.parse(s);
			System.out.println(date+"\n");
			Calendar c = new GregorianCalendar();
			c.setTime(date);
			int day = c.get(Calendar.DATE);
			c.set(Calendar.DATE, 1);
			int day_week = c.get(Calendar.DAY_OF_WEEK);
			int month = c.getActualMaximum(Calendar.DATE);
			System.out.println("日\t一\t二\t三\t四\t五\t六");
			
			for(int j = 1; j < day_week; j++) {
				System.out.print(" \t");
			}
			
			for(int i = 1; i <= month; i++) {
				if(day == i) 
					System.out.print("*");
				System.out.print(i+"\t");
				if((i+day_week-1)%7 == 0)
					System.out.println("\n");
			}
		} catch (ParseException e) {
			System.out.println("格式错误!");
		}
	}
}

结果:


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值