java8 时间格式化

/**
 * TestLocalDateTime.java
 * com.javabase.test17
 * 本文转载自 尚硅谷视频中教学代码 http://www.gulixueyuan.com/my/course/56 第十八 十九讲
*/


package com.javabase.test17;


import java.time.DayOfWeek;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.Period;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Set;


import org.junit.Test;


/**
 * java 8 对于日期和时间的使用
 *
 * @author   Chufanzgheng(1280251739@qq.com)
 * @Date	 2018年1月24日 	 
 */
public class TestLocalDateTime {
	
	
	/**
	 * localDate The operation of time
	 */
	@Test
	public void  test1(){
		
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.print("++++【localDateTime】++++"+localDateTime);
		// -------iso 标准时间体系-------
		LocalDateTime localDateTime1 = LocalDateTime.of(2018, 1, 24, 9, 46);
		System.out.println("++++++【localDateTime1】+++++"+localDateTime1);
		LocalDateTime localDateTime2 = localDateTime1.minusDays(20);
		System.out.println("+++++++【localDateTime2】+++++++"+localDateTime2);
		System.out.println("+++++++【localDateTime2.plusMonths(2)】+++++++++"+localDateTime2.plusMonths(2));
		System.out.println("localDateTime2.getYear()"+localDateTime2.getYear());
		System.out.println("localDateTime2.getMonthValue()"+localDateTime2.getMonthValue());
		System.out.println("localDateTime2.getMonth()"+localDateTime2.getMonth());
		System.out.println("localDateTime2.getDayOfWeek()"+localDateTime2.getDayOfWeek());
		System.out.println("localDateTime2.getDayOfMonth()"+localDateTime2.getDayOfMonth());
		System.out.println("localDateTime2.getHour()"+localDateTime2.getHour());
		System.out.println("localDateTime2.getMinute()"+localDateTime2.getMinute());
		System.out.println("localDateTime2.getSecond()"+localDateTime2.getSecond());
	}
	
	//2. Instant : 时间戳。 (使用 Unix 元年  1970年1月1日 00:00:00 所经历的毫秒值)
	@Test
	public void test2(){
		
		Instant ins = Instant.now();  //默认使用 UTC 时区
		System.out.println(ins);
		//偏移时区调整
		OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8)); // 时间偏移量8个小时
		System.out.println(odt);
		System.out.println("++++ins.getNano()++++"+ins.getNano()); 
		Instant ins2 = Instant.ofEpochSecond(5); 
		System.out.println("++++ins2++++"+ins2);
	}
	
	/**
	 * 计算时间间隔  Duration Period
	 * @throws InterruptedException 
	 *  toMillis()
	 * 
	 */
	@Test
	public void test3() throws InterruptedException{
		
		Instant instantBegin = Instant.now();
		Thread.sleep(2000);
		Instant instantEnd = Instant.now();
		System.out.println("输出当前时间间隔差"+Duration.between(instantBegin, instantEnd).toMillis());
		// -----------------------------------------------------------------------
		LocalDate local1 = LocalDate.now();
		LocalDate local2 = LocalDate.of(2016, 7, 24);
		Period period = Period.between(local1, local2);
		System.out.println("++++year++++"+period.getYears());
		System.out.println("++++month++++"+period.getMonths());
		System.out.println("++++days++++"+period.getDays());
	}
	
	/**
	 * 时间校正器
	 * TemporalAdjuster
	 */
	@Test
	public void test4(){
		
		LocalDateTime ldt = LocalDateTime.now();
		System.out.println("-----ldt-----"+ldt);
		
		LocalDateTime ldt2 = ldt.withDayOfMonth(30);//表示为本月中的第几天
		System.out.println("----ldt2----"+ldt2);
		
		//计算下周一的时间
		LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
		System.out.println("------ldt3-----"+ldt3);
		
		//自定义:下一个工作日
		LocalDateTime ldt4 = ldt.with((local) ->{
			
			LocalDateTime ldt5 = (LocalDateTime) local;
			DayOfWeek dow = ldt5.getDayOfWeek();
			
			if(dow.equals(DayOfWeek.FRIDAY)){
				return ldt5.plusDays(3);
			}else if(dow.equals(DayOfWeek.SATURDAY)){
				return ldt5.plusDays(2);
			}else{
				return ldt5.plusDays(1);
			}
		});
		System.out.println("-------ldt4-----"+ldt4);
		
	}
	
	
	/**
	 * 5. DateTimeFormatter : 解析和格式化日期或时间
	 */
	@Test
	public void test5(){
		
		DateTimeFormatter dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println("【----未格式化之前----】" + localDateTime);
		System.out.println("【----格式化之后----】"+dateTimeFormater.format(localDateTime));
	}
	
	@Test
	public void test6(){
		
		Set<String> set = ZoneId.getAvailableZoneIds();
		set.forEach(System.out::println);
	}
	
	/**
	 * 7.ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期
	 */
	@Test
	public void test7(){
		
		LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
		System.out.println("----【ldt】----"+ldt);
		
		ZonedDateTime zdt =  ZonedDateTime.now(ZoneId.of("America/New_York"));
		System.out.println("----【zdt】----"+zdt);
	}
	
	
	/**
	 * <B>备注:<B>
	 * 
	 * zone	英[zəʊn]美[zoʊn]n.地带; 区域,范围; 地区,时区;  [物] 晶带;vt.	划分成带; 用带子围绕;vi.	分成区,分成地带;
	 * 
	 * available 英[əˈveɪləbl]美[əˈveləbəl]adj.	可获得的; 有空的; 可购得的; 能找到的;
	 * 
	 * offset 美[ˈɔ:fset]vt.  抵消; 补偿; (为了比较的目的而)把…并列(或并置) ; 
	 * 为(管道等)装支管;vi.	形成分支,长出分枝; 装支管;n.	开端; 出发; 平版印刷; 抵消,补偿;
	 * 
	 * duration	美[duˈreɪʃn] n.	持续,持续的时间,期间; (时间的) 持续,持久,连续; [语音学] 音长,音延;
	 * 
	 * instant	英[ˈɪnstənt] 美[ˈɪnstənt] n.	瞬间,顷刻; 此刻; 当月; 速食食品,即溶饮料; adj.	立即的; 迫切的; 正在考虑的,目前的; 即食的;
	 * 
	 * temporal 英[ˈtempərəl] 美[ˈtɛmpərəl,ˈtɛmprəl] adj.时间的; 世俗的; 暂存的; <语>表示时间的; n.暂存的事物,世间的事物; 世俗的权力; 一时的事物,俗事;
	 * 
	 * adjuster	英[ə'dʒʌstə] 美[ə'dʒʌstə] n.调停者,调节器;
	 * 
	 */
	
	


}




                
### 回答1: 在Java 8中,可以使用`DateTimeFormatter`类来格式日期。 以下是一个示例代码,可以将日期格式为指定的字符串格式: ```java import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateFormatExample { public static void main(String[] args) { // 创建一个 LocalDateTime 对象 LocalDateTime now = LocalDateTime.now(); // 创建一个日期时间格式对象 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 使用格式对象将日期格式为字符串 String formattedDateTime = now.format(formatter); // 输出格式后的日期字符串 System.out.println("Formatted date time: " + formattedDateTime); } } ``` 在上面的示例中,我们首先创建了一个`LocalDateTime`对象,表示当前日期和时间。然后,我们使用`DateTimeFormatter`类创建了一个日期时间格式对象,并指定了格式字符串`"yyyy-MM-dd HH:mm:ss"`,表示年份-月份-日期 时:分:秒的格式。最后,我们使用格式对象将`LocalDateTime`对象格式为字符串,并输出该字符串。 ### 回答2: 在Java 8中,日期格式是通过`DateTimeFormatter`类来实现的。这个类提供了许多预定义的格式模式,也支持自定义格式模式。 要使用`DateTimeFormatter`类进行日期格式,首先需要创建一个实例,并指定所需的格式。例如,如果我们想将一个`LocalDate`对象格式为"yyyy-MM-dd"的形式,可以使用以下代码: ```java LocalDate date = LocalDate.now(); // 获取当前日期 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 创建格式器 String formattedDate = date.format(formatter); // 使用格式器格式日期 System.out.println(formattedDate); // 输出格式后的日期 ``` 上述代码中,我们首先使用`LocalDate.now()`获取了当前日期,然后创建了一个指定格式为"yyyy-MM-dd"的`DateTimeFormatter`对象。接下来,我们使用`format()`方法将`LocalDate`对象格式为字符串,并将结果赋给`formattedDate`变量。最后,我们通过`System.out.println()`方法将格式后的日期输出到控制台。 除了预定义的格式模式,`DateTimeFormatter`还支持自定义格式模式,可以根据需求灵活设置日期的格式。比如,如果我们想将日期格式为"MM/dd/yyyy HH:mm:ss"的形式,可以使用以下代码: ```java LocalDateTime dateTime = LocalDateTime.now(); // 获取当前日期时间 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss"); // 创建格式器 String formattedDateTime = dateTime.format(formatter); // 使用格式器格式日期时间 System.out.println(formattedDateTime); // 输出格式后的日期时间 ``` 上述代码中,我们使用`LocalDateTime.now()`获取了当前日期时间,然后创建了一个指定格式为"MM/dd/yyyy HH:mm:ss"的`DateTimeFormatter`对象。接下来,我们使用`format()`方法将`LocalDateTime`对象格式为字符串,并将结果赋给`formattedDateTime`变量。最后,我们通过`System.out.println()`方法将格式后的日期时间输出到控制台。 总结起来,Java 8提供了强大且灵活的日期格式功能,通过`DateTimeFormatter`类可以方便地进行日期的格式。无论是使用预定义的格式模式还是自定义格式模式,我们都可以通过`format()`方法将日期格式为所需的形式。 ### 回答3: Java 8 引入了新的日期时间 API,使日期格式变得更加简单和灵活。在Java 8之前,我们通常使用SimpleDateFormat类来格式日期,但这个类存在线程安全问题。Java 8 的新日期时间 API是线程安全的,并且提供了一种更好的方式来格式日期。 Java 8 提供了DateTimeFormatter类,用于格式日期和时间。我们可以使用DateTimeFormatter的ofPattern()方法,传入一个模式来指定日期格式。模式是一个由各种字符组成的字符串,每个字符代表了一个日期或时间元素的格式。例如,"yyyy-MM-dd"代表了年份、月份和日期的格式。 下面是一个例子,展示了如何使用DateTimeFormatter来格式日期: ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class DateTimeFormatting { public static void main(String[] args) { LocalDate currentDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String formattedDate = currentDate.format(formatter); System.out.println("Formatted date: " + formattedDate); } } ``` 上述代码中,我们首先获取了当前日期,并创建了一个DateTimeFormatter对象来指定日期格式。然后,我们使用format()方法将当前日期格式为指定格式的字符串。最后,我们输出格式后的日期。 运行上述代码,将会得到类似于"2022-01-01"的格式日期。 除了日期之外,我们还可以格式时间和日期时间。DateTimeFormatter还提供了对应的字符来表示小时、分钟、秒等时间元素的格式。 总的来说,Java 8提供了简单、安全和灵活的日期格式方式,通过DateTimeFormatter类的ofPattern()方法,我们能轻松地指定任何我们想要的日期格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值