【Java 8 新特性】Java DateTimeFormatter 日期时间格式化器-程序员宅基地

技术标签: # Java 8  java  Formatter  

DateTimeFormatter是在Java 8中引入的一个格式化器,用于打印和解析日期时间对象。

DateTimeFormatter是不可变的,并且是线程安全的。

DateTimeFormatter使用用户定义的格式(如 "yyyy-MMM-dd hh:mm:ss")或使用预定义的常数(如ISO_LOCAL_DATE_TIME)来格式化日期时间。

一个DateTimeFormatter可以用所需的LocaleChronologyZoneIdDecimalStyle创建。

DateTimeFormatter通过使用其ofPattern方法被实例化为一个日期时间格式字符串。

实例化DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss"); 

查找代码,用给定的格式打印日期时间(date-time)对象的代码。

String dateTime = formatter.format(LocalDateTime.now());
System.out.println(dateTime); //2018-Dec-21 11:14:12 

查找代码,用给定的格式解析一个日期时间(date-time)对象。

LocalDateTime ldt = LocalDateTime.parse("2018-Dec-20 08:25:30", formatter);
System.out.println(ldt); //2018-12-20T08:25:30

下面,我们将讨论DateTimeFormatter的方法,并举例说明LocalDateLocalDateTimeLocalTime实例的格式。

实例化 DateTimeFormatter

DateTimeFormatter有以下静态方法来实例化DateTimeFormatter

  1. ofPattern(String pattern): 使用给定的模式创建格式化器。
  2. ofPattern(String pattern, Locale locale): 使用给定的模式和区域设置创建格式化器。
  3. ofLocalizedDate(FormatStyle dateStyle): 创建具有当地特定日期格式的格式化器。FormatStyle是一个枚举,其值可以是FULL, LONG, MEDIUM, SHORT
  4. ofLocalizedDateTime(FormatStyle dateTimeStyle): 创建具有特定地区日期时间(date-time)格式的格式化器。
  5. ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle): 创建具有特定地区日期时间(date-time)格式的格式化器。我们需要为日期和时间分别传递FormatStyle。例如,日期可以是LONG,时间可以是SHORT
  6. ofLocalizedTime(FormatStyle timeStyle): 创建具有当地特定时间格式的格式化器。

示例

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    
	LocalDate localDate = LocalDate.now();
	
	DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("MMM dd, yyyy");
	String formattedDate1 = formatter1.format(localDate);
	System.out.println(formattedDate1); //Dec 17, 2018
	
	DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.CANADA);
	String formattedDate2 = formatter2.format(localDate);
	System.out.println(formattedDate2); //Dec. 17, 2018 
	
	DateTimeFormatter formatter3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
	String formattedDate3 = formatter3.format(localDate);
	System.out.println(formattedDate3); //Monday, December 17, 2018
	
	LocalDateTime localDateTime = LocalDateTime.now();
	
	DateTimeFormatter formatter4 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
	String formattedDate4 = formatter4.format(localDateTime);
	System.out.println(formattedDate4); //Dec 17, 2018, 9:14:39 PM	

	DateTimeFormatter formatter5 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT);
	String formattedDate5 = formatter5.format(localDateTime);
	System.out.println(formattedDate5); //December 17, 2018, 9:14 PM
	
	LocalTime localTime = LocalTime.now();
	
	DateTimeFormatter formatter6 = DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM);
	String formattedDate6 = formatter6.format(localTime);
	System.out.println(formattedDate6); //9:14:39 PM		
  }
} 

输出

Dec 17, 2018
Dec. 17, 2018
Monday, December 17, 2018
Dec 17, 2018, 9:14:39 PM
December 17, 2018, 9:14 PM
9:14:39 PM 

FormatStyle:

它是一个关于本地化日期、时间或日期时间(date-time)格式化风格的枚举。

它有以下常数。
1.FULL:例如 'Tuesday, April 11, 2015 AD' or '5:30:45pm PST'.
2. LONG:例如 'January 10, 2018'.
3. MEDIUM:例如 'Jan 10, 2018'
4. SHORT:例如 '11.15.50' or '6:30pm'.

DateTimeFormatter format() 和 formatTo()。

为了格式化一个日期、时间或日期时间(date-time),DateTimeFormatter提供了以下方法。

  1. format(TemporalAccessor temporal): 使用该格式化器对给定的日期时间(date-time)对象进行格式化,并以字符串形式返回。
  2. formatTo(TemporalAccessor temporal, Appendable appendable): 使用该格式化器对给定的日期时间(date-time)对象进行格式化,并将结果附加到给定的Appendable对象中。Appendable对象可以是StringBufferStringBuilder等的实例。

示例

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    	
     DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd hh:mm:ss");
     LocalDateTime ldt = LocalDateTime.now();
     System.out.println(dtf.format(ldt)); //2018-Dec-20 03:50:45
     
     StringBuffer sb = new StringBuffer("Date ");
     dtf.formatTo(ldt, sb);
     System.out.println(sb); //Date 2018-Dec-20 03:50:45
  }
} 

输出

2018-Dec-20 03:50:45
Date 2018-Dec-20 03:50:45 

格式化 LocalDate

LocalDate是一个在ISO-8601日历系统中没有时区的日期。

找到使用DateTimeFormatter格式化LocalDate的例子。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    
	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
	LocalDate ld = LocalDate.now();
	System.out.println(dtf.format(ld)); //2018-Dec-20

	dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd(E)");
	ld = LocalDate.now();
	System.out.println(dtf.format(ld)); //2018-Dec-20(Thu)

	dtf = DateTimeFormatter.ofPattern("MMM dd, YYYY");
	ld = LocalDate.now();
	System.out.println(dtf.format(ld)); //Dec 20, 2018
  }
} 

输出

2018-Dec-20
2018-Dec-20(Thu)
Dec 20, 2018 

DateTimeFormatter也被用来解析一个本地日期。

查找示例代码。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd, yyyy");
LocalDate ld = LocalDate.parse("Dec 20, 2018", dtf);
System.out.println(ld); 

输出

2018-12-20 

格式化 LocalDateTime

LocalDateTimeISO-8601日历系统中没有时区的日期时间。

查找使用DateTimeFormatter格式化LocalDateTime的示例。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    
	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd hh:mm:ss");
	LocalDateTime ldt = LocalDateTime.now();
	System.out.println(dtf.format(ldt)); //2018-Dec-20 07:40:03 

	dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd(E) hh:mm:ss a");
	ldt = LocalDateTime.now();
	System.out.println(dtf.format(ldt)); //2018-Dec-20(Thu) 07:40:03 PM

	dtf = DateTimeFormatter.ofPattern("yy-MM-dd HH:mm:ss");
	ldt = LocalDateTime.now();
	System.out.println(dtf.format(ldt)); //18-12-20 19:40:03
  }
} 

输出

2018-Dec-20 07:40:03 
2018-Dec-20(Thu) 07:40:03 PM
18-12-20 19:40:03 

DateTimeFormatter也被用来解析本地日期时间。

查找示例代码。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse("2018-Dec-20 08:25:30", dtf);
System.out.println(ldt); 

输出

2018-12-20T08:25:30 

格式化 LocalTime

LocalTimeISO-8601日历系统中没有时区的时间。

查找使用DateTimeFormatter格式化LocalTime的例子。

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    
	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm:ss");
	LocalTime lt = LocalTime.now();
	System.out.println(dtf.format(lt)); //08:03:32

	dtf = DateTimeFormatter.ofPattern("hh:mm:ss a");
	lt = LocalTime.now();
	System.out.println(dtf.format(lt)); //08:03:32 PM

	dtf = DateTimeFormatter.ofPattern("HH:mm");
	lt = LocalTime.now();
	System.out.println(dtf.format(lt)); //20:03
  }
} 

输出

08:03:32
08:03:32 PM
20:03 

DateTimeFormatter也被用来解析本地时间。

查找示例代码。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime lt = LocalTime.parse("08:25:30", dtf);
System.out.println(lt); 

输出

08:25:30 

DateTimeFormatter “parse” 方法

DateTimeFormatter提供以下方法来解析文本。

1.

TemporalAccessor parse(CharSequence text) 

解析一个日期、时间或日期时间(date-time)的文本,并返回时间性(temporal)对象。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss");
TemporalAccessor ta = formatter.parse("18-Dec-2017 02:46:41");
System.out.println(ta.get(ChronoField.YEAR));
System.out.println(ta.get(ChronoField.HOUR_OF_AMPM)); 

输出

2017
2 

2.

TemporalAccessor parse(CharSequence text, ParsePosition position) 

我们可以通过ParsePosition来转义给定文本中的一些字符。

我们用给定的初始索引启动一个ParsePositionparse方法将从那里开始解析给定的文本。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss");
TemporalAccessor ta = formatter.parse("Date 18-Dec-2017 02:46:41", new ParsePosition(5));
System.out.println(ta.get(ChronoField.YEAR));
System.out.println(ta.get(ChronoField.HOUR_OF_AMPM)); 

输出

2017
2 

3.

<T> T parse(CharSequence text, TemporalQuery<T> query) 

解析给定的文本并返回TemporalQuery指定的对象。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss");
LocalDate localDate = formatter.parse("18-Dec-2017 02:46:41", TemporalQueries.localDate());
System.out.println(localDate); 

输出

2017-12-18 

4.

TemporalAccessor parseBest(CharSequence text, TemporalQuery<?>... queries) 

解析给定文本并返回其中一个指定类型。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss");
TemporalAccessor ta = formatter.parseBest("18-Dec-2017 02:46:41", 
	 TemporalQueries.localDate(), TemporalQueries.localTime());
System.out.println(ta); 

输出

2017-12-18 

5.

TemporalAccessor parseUnresolved(CharSequence text, ParsePosition position) 

用给定的ParsePosition解析给定的文本,但不解决它。

这意味着即使月日是38,它也不会产生错误。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss");
TemporalAccessor ta = formatter.parseUnresolved("Date 38-Dec-2017 02:46:41", new ParsePosition(5));
System.out.println(ta); 

输出

{
    DayOfMonth=38, ClockHourOfAmPm=2, MinuteOfHour=46, YearOfEra=2017, SecondOfMinute=41, MonthOfYear=12},null 

6.

static TemporalQuery<Period> parsedExcessDays() 

提供一个查询,以访问作为已解析的Period的多余天数。

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    	
	DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("HH:mm");
	TemporalAccessor parsed1 = formatter1.parse("24:00");
	LocalTime lt1 = parsed1.query(LocalTime::from);
	Period excessDays1 = parsed1.query(DateTimeFormatter.parsedExcessDays());
	System.out.println(lt1 + " , " + excessDays1);	//00:00 , P1D
	
	DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
	TemporalAccessor parsed2 = formatter2.parse("2018-12-03 24:00");
	LocalDateTime lt2 = parsed2.query(LocalDateTime::from);
	Period excessDays2 = parsed2.query(DateTimeFormatter.parsedExcessDays());
	System.out.println(lt2 + " , " + excessDays2); //2018-12-04T00:00 , P0D		
  }
} 

输出

00:00 , P1D
2018-12-04T00:00 , P0D 

我们可以看到,当我们只有时间时,24:00(一天的结束),我们得到的时间是00和超过1天(P1D意味着有1天的时间)。

但是当我们同时提供日期和时间时,在这种情况下,多余的天数就会加到日期部分。在我们的例子中,我们可以看到第3天已经变成了第4天,多余的天数为0

7.

static TemporalQuery<Boolean> parsedLeapSecond() 

提供一个查询,用于访问是否解析了闰秒。

如果解析到闰秒,该查询返回真,否则返回假。

UTC时区,闰秒发生在'23:59:60'

在其他时区,时间可能不同。

查找示例。

import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    	
	DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
	TemporalAccessor parsed = formatter.parse("2017-12-31T23:59:60Z");
	Instant instant = parsed.query(Instant::from);
	System.out.println(instant);
        System.out.println("leap second parsed=" 
	   + parsed.query(DateTimeFormatter.parsedLeapSecond()));	
  }
} 

输出

2017-12-31T23:59:59Z
leap second parsed=true 

DateTimeFormatter.ISO_INSTANTUTC格式化一个瞬间(instant)。

DateTimeFormatter “with” 方法

下列方法返回DateTimeFormatter实例。

  1. withChronology(Chronology chrono): 返回具有给定时间顺序的格式化器副本。
  2. withDecimalStyle(DecimalStyle decimalStyle): 返回具有给定十进制样式的格式化器副本。
  3. withLocale(Locale locale): 返回具有给定区域设置的格式化器副本。
  4. withResolverFields(TemporalField… resolverFields): 返回具有给定时间字段的格式化器副本。
  5. withResolverFields(Set resolverFields): 返回这个格式化器的副本,并将给定的时间字段作为Set。
  6. withResolverStyle(ResolverStyle resolverStyle): 返回具有给定解析器样式的格式化器副本。
  7. withZone(ZoneId zone): 返回这个格式化器的副本,并给定区域ID。

我们可以在使用DateTimeFormatterBuilder实例化DateTimeFormatter时使用上述方法。

查找示例代码。

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DecimalStyle;
import java.time.format.ResolverStyle;
import java.time.format.TextStyle;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    	
	DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
	DateTimeFormatter formatter = builder.appendLiteral("Day is:")
	    .appendValue(ChronoField.DAY_OF_MONTH)
	    .appendLiteral(", month is:")
	    .appendValue(ChronoField.MONTH_OF_YEAR)
	    .appendLiteral(", and year:")
	    .appendPattern("u")
	    .appendLiteral(" with the time:")
	    .appendValue(ChronoField.HOUR_OF_DAY)
	    .appendLiteral(":")
	    .appendText(ChronoField.MINUTE_OF_HOUR, TextStyle.NARROW_STANDALONE)
	    .toFormatter()
	    .withDecimalStyle(DecimalStyle.STANDARD)
	    .withChronology(IsoChronology.INSTANCE)
	    .withLocale(Locale.CANADA)
	    .withResolverStyle(ResolverStyle.LENIENT)
	    .withZone(ZoneId.systemDefault());
	
	LocalDateTime dateTime  = LocalDateTime.now(); 
	String str =  dateTime.format(formatter); 
	System.out.println(str);	
  }
} 

输出

Day is:20, month is:12, and year:2018 with the time:11:36 

DateTimeFormatter “get” 方法

我们可以使用以下方法获取DateTimeFormatter对象信息。
getChronology():获取年表。
getDecimalStyle():获取十进制风格。
getLocale():获取区域设置。
getResolverFields():获取解析器字段。
getResolverStyle():获取解析器样式。
getZone():获取区域。

示例

import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    	
     DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
     System.out.println("Chronology: " + dtf.getChronology());
     System.out.println("DecimalStyle: " + dtf.getDecimalStyle());
     System.out.println("Locale: "+ dtf.getLocale());
     System.out.println("ResolverFields: "+ dtf.getResolverFields());
     System.out.println("ResolverStyle: "+ dtf.getResolverStyle());
     System.out.println("Zone: "+ dtf.getZone());
  }
} 

输出

Chronology: ISO
DecimalStyle: DecimalStyle[0+-.]
Locale: en_US
ResolverFields: null
ResolverStyle: STRICT
Zone: null 

将DateTimeFormatter转换为Format

DateTimeFormatter提供以下方法将DateTimeFormatter转换为java.text.Format

  1. toFormat(): 返回java.text.Format实例。
  2. toFormat(TemporalQuery<?> parseQuery): 返回java.text.Format实例,它将使用给定的查询进行解析。

示例

import java.text.Format;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    	
     DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("MMM dd, yyyy");
     Format format1 = dtf1.toFormat();
     String ld = format1.format(LocalDate.parse("2017-12-20"));
     System.out.println(ld); //Dec 20, 2017
     
     DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm:ss");
     Format format2 = dtf2.toFormat();
     String time = format2.format(LocalDateTime.now());
     System.out.println(time); //12:34:23    
  }
} 

输出

Dec 20, 2017
12:34:23 

预定义格式

DateTimeFormatter有以下预定义的格式。

Formatter Example
BASIC_ISO_DATE ‘20181203’
ISO_LOCAL_DATE ‘2018-12-03’
ISO_OFFSET_DATE ‘2018-12-03+01:00’
ISO_DATE ‘2018-12-03+01:00’; ‘2018-12-03’
ISO_LOCAL_TIME ‘11:15:30’
ISO_OFFSET_TIME ‘11:15:30+01:00’
ISO_TIME ‘11:15:30+01:00’; ‘11:15:30’
ISO_LOCAL_DATE_TIME ‘2018-12-03T11:15:30’
ISO_OFFSET_DATE_TIME ‘2018-12-03T11:15:30+01:00’
ISO_ZONED_DATE_TIME ‘2018-12-03T11:15:30+01:00[Europe/Paris]’
ISO_DATE_TIME ‘2018-12-03T11:15:30+01:00[Europe/Paris]’
ISO_ORDINAL_DATE ‘2018-337’
ISO_WEEK_DATE ‘2018-W48-6’
ISO_INSTANT ‘2018-12-03T11:15:30Z’
RFC_1123_DATE_TIME ‘Tue, 3 Jun 2018 11:05:30 GMT’

例如,我们正在提供一个示例,以便使用预定义格式化器ISO_WEEK_DATE来打印和解析本地日期。

找到代码。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
    
  public static void main(String[] args) {
    
	DateTimeFormatter formatter = DateTimeFormatter.ISO_WEEK_DATE;
	String dateTime = formatter.format(LocalDate.now());
	System.out.println(dateTime); //2018-W51-5
	
	LocalDate ld = LocalDate.parse("2018-W40-4", formatter);
	System.out.println(ld); //2018-10-04
  }
} 

输出

2018-W51-5
2018-10-04 

Pattern Letters 和 Symbols

找到格式化日期时间的模式字母(letters)和符号(symbols)。

Symbol Description Example
G era AD; Anno Domini; A
u year 2018; 18
y year-of-era 2018; 18
D day-of-year 180
M/L month-of-year 7; 07; Jul; July; J
d day-of-month 11
g modified-julian-day 2451334
Q/q quarter-of-year 3; 03; Q3; 3rd quarter
Y week-based-year 1999; 99
w week-of-week-based-year 25
W week-of-month 3
E day-of-week Tue; Tuesday; T
e/c localized day-of-week 2; 02; Tue; Tuesday; T
F day-of-week-in-month 2
a am-pm-of-day AM
h clock-hour-of-am-pm (1-12) 12
K hour-of-am-pm (0-11) 0
k clock-hour-of-day (1-24) 24
H hour-of-day (0-23) 0
m minute-of-hour 35
s second-of-minute 50
S fraction-of-second 970
A milli-of-day 1234
n nano-of-second 987654321
N nano-of-day 1234000000
V time-zone ID America/Los_Angeles; Z; -08:30
v generic time-zone name Pacific Time; PT
z time-zone name Pacific Standard Time; PST
O localized zone-offset GMT+8; GMT+08:00; UTC-08:00
X zone-offset ‘Z’ for zero Z; -08; -0830; -08:30; -083015; -08:30:15
x zone-offset +0000; -08; -0830; -08:30; -083015; -08:30:15
Z zone-offset +0000; -0800; -08:00
p pad next 1
' escape for text
'' single quote '
[ optional section start
] optional section end

参考文献

【1】Class DateTimeFormatter
【2】Java LocalDate
【3】Java DateTimeFormatter

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31635851/article/details/120132776

智能推荐

从零开始搭建Hadoop_创建一个hadoop项目-程序员宅基地

文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目

心脏滴血漏洞HeartBleed CVE-2014-0160深入代码层面的分析_heartbleed代码分析-程序员宅基地

文章浏览阅读1.7k次。心脏滴血漏洞HeartBleed CVE-2014-0160 是由heartbeat功能引入的,本文从深入码层面的分析该漏洞产生的原因_heartbleed代码分析

java读取ofd文档内容_ofd电子文档内容分析工具(分析文档、签章和证书)-程序员宅基地

文章浏览阅读1.4k次。前言ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。ofd文件分析工具下载:点我下载。ofd文件解压后,可以看到如下内容: 对于xml文件,可以用文本工具查看。但是对于印章文件(Seal.esl)、签名文件(SignedValue.dat)就无法查看其内容了。本人开发一款ofd内容查看器,..._signedvalue.dat

基于FPGA的数据采集系统(一)_基于fpga的信息采集-程序员宅基地

文章浏览阅读1.8w次,点赞29次,收藏313次。整体系统设计本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下:图1:FPGA数据采集系统框图从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D.._基于fpga的信息采集

微服务 spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL-程序员宅基地

文章浏览阅读2.5w次。1.背景错误信息:-- [http-nio-9904-exec-5] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud..._com.netflix.zuul.exception.zuulexception

邻接矩阵-建立图-程序员宅基地

文章浏览阅读358次。1.介绍图的相关概念  图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为:  G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图

随便推点

MDT2012部署系列之11 WDS安装与配置-程序员宅基地

文章浏览阅读321次。(十二)、WDS服务器安装通过前面的测试我们会发现,每次安装的时候需要加域光盘映像,这是一个比较麻烦的事情,试想一个上万个的公司,你天天带着一个光盘与光驱去给别人装系统,这将是一个多么痛苦的事情啊,有什么方法可以解决这个问题了?答案是肯定的,下面我们就来简单说一下。WDS服务器,它是Windows自带的一个免费的基于系统本身角色的一个功能,它主要提供一种简单、安全的通过网络快速、远程将Window..._doc server2012上通过wds+mdt无人值守部署win11系统.doc

python--xlrd/xlwt/xlutils_xlutils模块可以读xlsx吗-程序员宅基地

文章浏览阅读219次。python–xlrd/xlwt/xlutilsxlrd只能读取,不能改,支持 xlsx和xls 格式xlwt只能改,不能读xlwt只能保存为.xls格式xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改xlrd打开文件import xlrdexcel=xlrd.open_workbook('E:/test.xlsx') 返回值为xlrd.book.Book对象,不能修改获取sheett_xlutils模块可以读xlsx吗

关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题_unresolved attribute reference 'find_element_by_id-程序员宅基地

文章浏览阅读8.2w次,点赞267次,收藏656次。运行Selenium出现'WebDriver' object has no attribute 'find_element_by_id'或AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'等定位元素代码错误,是因为selenium更新到了新的版本,以前的一些语法经过改动。..............._unresolved attribute reference 'find_element_by_id' for class 'webdriver

DOM对象转换成jQuery对象转换与子页面获取父页面DOM对象-程序员宅基地

文章浏览阅读198次。一:模态窗口//父页面JSwindow.showModalDialog(ifrmehref, window, 'dialogWidth:550px;dialogHeight:150px;help:no;resizable:no;status:no');//子页面获取父页面DOM对象//window.showModalDialog的DOM对象var v=parentWin..._jquery获取父window下的dom对象

什么是算法?-程序员宅基地

文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法

【网络安全】网络安全的标准和规范_网络安全标准规范-程序员宅基地

文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范