oracle中日期格式'yyyy-mm-dd'和'yyyymmdd'的区别

 

对于年月日中"日"是个位的情况下,处理不一样,'yyyymmdd'格式没问题,而式'yyyy-mm-dd'格式则不行,请看:

 

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

 

Session altered.

 

SQL> select to_date('2007059','yyyy-mm-dd hh24:mi:ss') from dual;

select to_date('2007059','yyyy-mm-dd hh24:mi:ss') from dual

                 *

ERROR at line 1:

ORA-01861: literal does not match format string

 

 

SQL> select to_date('2007059','yyyy-mm-dd') from dual;

select to_date('2007059','yyyy-mm-dd') from dual

                 *

ERROR at line 1:

ORA-01861: literal does not match format string

 

 

SQL> select to_date('2007059','yyyymmdd')   from dual;

 

TO_DATE('2007059','

-------------------

2007-05-09 00:00:00

 

 

——————————————————————————————————————

日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别

{0:yyyy-MM-dd HH:mm:ss.fff}:使用24小时制格式化日期

{0:yyyy-MM-dd hh:mm:ss.fff}:使用12小时制格式化日期

 

以下同理,从左至右分别为-年-月-日 时:分:秒.毫秒

{0:yyyy-MM-dd HH:mm:ss zzz}

{0:yyyy-MM-dd HH:mm:ss.ff zzz}

{0:yyyy-MM-dd HH:mm:ss.fff zzz}

{0:yyyy-MM-dd HH:mm:ss.ffff zzz}

 

以下测试代码

//---假设时间为-2009-03-17 16:50:49.92

object objValue2 = Business.Services.ExecuteScalar(sqliteconnstring, "Select LastUpdate From CmItemClass2 order by LastUpdate desc limit 0,1");

string lastUpdate2 = objValue2 == null ? string.Empty : string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", objValue2); //--输出2009-03-17 16:50:49.920

string lastUpdate3 = objValue2 == null ? string.Empty : string.Format("{0:yyyy-MM-dd hh:mm:ss.fff}", objValue2); //--输出2009-03-17 04:50:49.920

 

 

//--------------------

y 将指定 DateTime 对象的年份部分显示为位数最多为两位的数字。忽略年的前两位数字。如果年份是一位数字 (1-9),则它显示为一位数字。

yy 将指定 DateTime 对象的年份部分显示为位数最多为两位的数字。忽略年的前两位数字。如果年份是一位数字 (1-9),则将其格式化为带有前导 0 (01-09)。

yyyy 显示指定 DateTime 对象的年份部分(包括世纪)。如果年份长度小于四位,则按需要在前面追加零以使显示的年份长度达到四位。

 

z 仅以整小时数为单位显示系统当前时区的时区偏移量。偏移量总显示为带有前导或尾随符号(零显示为“+0”),指示早于格林威治时间 (+) 或迟于格林威治时间 (-) 的小时数。值的范围是 –12 到 +13。如果偏移量为一位数 (0-9),则将其显示为带合适前导符号的一位数。该时区的设置指定为 +X 或 –X,其中 X 是相对 GMT 以小时为单位的偏移量。所显示的偏移量受夏时制的影响。

zz 仅以整小时数为单位显示系统当前时区的时区偏移量。偏移量总显示为带有前导或尾随符号(零显示为“+00”),指示早于格林威治时间 (+) 或迟于格林威治时间 (-) 的小时数。值范围为 –12 到 +13。如果偏移量为单个数字 (0-9),则将其格式化为前面带有 0 (01-09) 并带有适当的前导符号。该时区的设置指定为 +X 或 –X,其中 X 是相对 GMT 以小时为单位的偏移量。所显示的偏移量受夏时制的影响。

zzz, zzz(外加任意数量的附加“z”字符)以小时和分钟为单位显示系统当前时区的时区偏移量。偏移量总是显示为带有前导或尾随符号(零显示为“+00:00”),指示早于格林威治时间 (+) 或迟于格林威治时间 (-) 的小时和分钟数。值范围为 –12 到 +13。如果偏移量为单个数字 (0-9),则将其格式化为前面带有 0 (01-09) 并带有适当的前导符号。该时区的设置指定为 +X 或 –X,其中 X 是相对 GMT 以小时为单位的偏移量。所显示的偏移量受夏时制的影响。

 

 

: 时间分隔符。

/ 日期分隔符。

" 带引号的字符串。显示转义符 (/) 之后两个引号之间的任何字符串的文本值。

' 带引号的字符串。显示两个“'”字符之间的任何字符串的文本值。

%c 其中 c 是标准格式字符,显示与格式字符关联的标准格式模式。

\c 其中 c 是任意字符,转义符将下一个字符显示为文本。在此上下文中,转义符不能用于创建转义序列(如“\n”表示换行)。

任何其他字符 其他字符作为文本直接写入输出字符串。

 

向 DateTime.ToString 传递自定义模式时,模式必须至少为两个字符长。如果只传递“d”,则公共语言运行库将其解释为标准格式说明符,这是因为所有单个格式说明符都被解释为标准格式说明符。如果传递单个“h”,则引发异常,原因是不存在标准的“h”格式说明符。若要只使用单个自定义格式进行格式化,请在说明符的前面或后面添加一个空格。例如,格式字符串“h”被解释为自定义格式字符串。

 

下表显示使用任意值 DateTime.Now(该值显示当前时间)的示例。示例中给出了不同的区域性和时区设置,以阐释更改区域性的影响。可以通过下列方法更改当前区域性:更改 Microsoft Windows 的“日期/时间”控制面板中的值,传递您自己的 DateTimeFormatInfo 对象,或将 CultureInfo 对象设置传递给不同的区域性。此表是说明自定义日期和时间说明符如何影响格式化的快速指南。请参阅该表下面阐释这些说明符的代码示例部分。

 

格式说明符 当前区域性 时区 输出

d, M en-US GMT 12, 4

d, M es-MX GMT 12, 4

d MMMM en-US GMT 12 April

d MMMM es-MX GMT 12 Abril

dddd MMMM yy gg en-US GMT Thursday April 01 A.D.

dddd MMMM yy gg es-MX GMT Jueves Abril 01 DC

h , m: s en-US GMT 6 , 13: 12

hh,mm:ss en-US GMT 06,13:12

HH-mm-ss-tt en-US GMT 06-13-12-AM

hh:mm, G\MT z  en-US GMT 05:13 GMT +0

hh:mm, G\MT z  en-US GMT +10:00 05:13 GMT +10

hh:mm, G\MT zzz en-US GMT 05:13 GMT +00:00

————————————————————————————————————————————————————————————————————

DateTime的Format格式 收藏

 

DateTime的Format格式,前只知道用,没有想到这么细!!

 

 格式字符 关联属性/说明

 d             ShortDatePattern

 D             LongDatePattern

 f              完整日期和时间(长日期和短时间)

 F             FullDateTimePattern(长日期和长时间)

 g             常规(短日期和短时间)

 G            常规(短日期和长时间)

 m、M     MonthDayPattern

 r、R        RFC1123Pattern

 s              用当地时间的 SortableDateTimePattern(基于 ISO 8601)

 t               hortTimePattern

 T              ongTimePattern

 u              niversalSortableDateTimePattern 用于显示通用时间的格式

 U             使用通用时间的完整日期和时间(长日期和长时间)

 y、Y       YearMonthPattern

 

 下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。

 

 格式模式 说明

 d                月中的某一天。一位数的日期没有前导零。

 dd              月中的某一天。一位数的日期有一个前导零。

 ddd            周中某天的缩写名称,在 AbbreviatedDayNames 中定义。

 dddd          周中某天的完整名称,在 DayNames 中定义。

 M              月份数字。一位数的月份没有前导零。

 MM           月份数字。一位数的月份有一个前导零。

 MMM       月份的缩写名称,在 AbbreviatedMonthNames 中定义。

 MMMM    月份的完整名称,在 MonthNames 中定义。

 y                不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。

 yy              不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。

 yyyy           包括纪元的四位数的年份。

 gg               时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。

 h                12 小时制的小时。一位数的小时数没有前导零。

 hh              12 小时制的小时。一位数的小时数有前导零。

 H               24 小时制的小时。一位数的小时数没有前导零。

 HH            24 小时制的小时。一位数的小时数有前导零。

 m              分钟。一位数的分钟数没有前导零。

 mm            分钟。一位数的分钟数有一个前导零。

 s                秒。一位数的秒数没有前导零。

 ss              秒。一位数的秒数有一个前导零。

 f                秒的小数精度为一位。其余数字被截断。

 ff               秒的小数精度为两位。其余数字被截断。

 fff              秒的小数精度为三位。其余数字被截断。

 ffff             秒的小数精度为四位。其余数字被截断。

 fffff            秒的小数精度为五位。其余数字被截断。

 ffffff           秒的小数精度为六位。其余数字被截断。

 fffffff          秒的小数精度为七位。其余数字被截断。

 t               在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。

 tt              在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。

 z               时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。

 zz             时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。

 zzz            完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。

 :               在 TimeSeparator 中定义的默认时间分隔符。

 /               在 DateSeparator 中定义的默认日期分隔符。

 % c          其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。

 \ c            其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\\”。

 

 只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,

 

 DateTime.ToString( "d") 返回 DateTime 值;“d”是标准短日期模式。

 DateTime.ToString( "%d") 返回月中的某天;“%d”是自定义模式。

 DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。

 

 

 

用DateTime.ToString(string format)输出不同格式的日期

DateTime.ToString()函数有四个重载。一般用得多的就是不带参数的那个了。殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期。以下把一些情况罗列出来,供大家参考。有些在MSDN上有的就没有列出来了。

1.         y代表年份,注意是小写的y,大写的Y并不代表年份。

 

2.         M表示月份。

 

3.         d表示日期,注意D并不代表什么。

 

4.         h或H表示小时,h用的是12小时制,H用的是24小时制。

 

5.         m表示分钟。

 

6.         s表示秒。注意S并不代表什么。

 

格式

 输出

 示例

 

 

y

 7

 string yy = DateTime.Now.ToString("y-MM")

 

yy="7-05"

 

yy

 07

 string yy = DateTime.Now.ToString("yy-MM")

 

yy="07-05"

 

yyy或更多的y

 1984

 string yy = DateTime.Now.ToString("yyyy");

 

yy="2007"

 

 

M

 5.

 string mon = DateTime.Parse("1984-05-09")ToString("yyyy-M")

 

mon = "1984-5"

 

MM

 05.

 string mon = DateTime.Parse("1984-05-09")ToString("MM")

 

mon = "05"

 

MMM

 如果是中文版的操作系统,则会输出:五月.

 

如果是英文操作系统,则输入月份前三个字母的简写:May

 string mon = DateTime.Parse("2006-07-01").ToString("MMM")

 

英文版操作系统:Jul

 

中文版操作系统:七月

 

MMMM或更多的M

 如果是中文版的操作系统,则会输出:五月.

 

如果是英文操作系统,则输入月份的全写

 string mon = DateTime.Parse("2006-07-01").ToString("MMM")

 

英文版操作系统:July

 

中文版操作系统:七月

 

日期或星期

 

d

 9

 string dd= DateTime.Parse("1984-05-09")ToString("d")

 

dd= "9"

 

 

 

dd

 09

 string dd= DateTime.Parse("1984-05-09")ToString("dd")

 

dd= "09"

 

ddd

 如果是中文版的操作系统,则会输出星期,如星期三。.

 

如果是英文操作系统,则输出星期的简写:如

 

Wed

 string dd = DateTime.Parse("2006-07-01").ToString("ddd")

 

英文版操作系统:Wed

 

中文版操作系统:星期三

 

dddd或更多的d

 如果是中文版的操作系统,则会输出星期,如星期三。.

 

如果是英文操作系统,则输出星期:如

 

Wednesday

 string dd = DateTime.Parse("2006-07-01").ToString("dddd")

 

英文版操作系统:Wednesday

 

中文版操作系统:星期三

 

小时

 

h

 小时范围:1-12

 string hh = DateTime.Now.ToString(“h”);

 

hh = 8

 

hh或更多的h

 小时范围:1-12

 string hh = DateTime.Now.ToString(“hh”);

 

hh = 08

 

H

 小时范围:0-23

 string hh = DateTime.Now.ToString(“yyyy-H”);

 

hh = 2006-8

 

HH或更多的H

 小时范围:0-23

 string hh = DateTime.Now.ToString(“yyyy-HH”);

 

hh = 2006-08

 

string hh = DateTime.Pare(“2006-7-4 18:00:00”).ToString(“yyyy-HH”);

 

hh = 2006-18

 

分钟

 

m

 6

 string mm =  DateTime.Now.ToString("yyyy-MM-dd-m");

 

mm = “2006-07-01-6”;

 

mm或更多的m

 06

 string mm =  DateTime.Now.ToString("yyyy-MM-dd-mm");

 

mm = “2006-07-01-06”;

 

 

s

 6

 string mm =  DateTime.Now.ToString("yyyy-MM-dd-s");

 

mm = “2006-07-01-6”;

 

ss或更多的s

 06

 string mm =  DateTime.Now.ToString("yyyy-MM-dd-ss");

 

mm = “2006-07-01-06”;

————————————————————————————————————————————