CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

关于国际化日期格式问题,遇到难题了,我都郁闷好长时间了。

楼主huangjianping()2005-06-01 17:46:28 在 MS-SQL Server / 应用实例 提问

大家帮个忙,我在一个芬兰项目中需要处理日期,芬兰的日期格式如下dd/mm/yyyy   hh:mm   这个格式也是客户输入的格式。我在程序中首先使用set   language   suomi   设置语言。然后使用   conn.execute("insert   into   MyTable   (MyDate)   values   ('6/5/2005   11:12')")   正常,数据库中的值为2005年5月6。可是问题来了我使用  
  set   rs=server.CreateObject("adodb.recordset")  
  strSql="select   *   from   MyTable"  
  rs.open   strSql,conn,1,2  
  rs.addnew  
  rs("MyDate")="25/5/2005"  
  rs.update  
  数据库中的值竟然是2005年6月5日!怎么办啊 问题点数:0、回复次数:7Top

1 楼xluzhong(Ralph)回复于 2005-06-01 18:09:20 得分 0

CAST   和   CONVERT  
  将某种数据类型的表达式显式转换为另一种数据类型。CAST   和   CONVERT   提供相似的功能。  
   
  语法  
  使用   CAST:  
   
  CAST   (   expression   AS   data_type   )    
   
  使用   CONVERT:  
   
  CONVERT   (data_type[(length)],   expression   [,   style])  
   
  参数  
  expression  
   
  是任何有效的   Microsoft®   SQL   Server™   表达式。有关更多信息,请参见表达式。    
   
  data_type  
   
  目标系统所提供的数据类型,包括   bigint   和   sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。    
   
  length  
   
  nchar、nvarchar、char、varchar、binary   或   varbinary   数据类型的可选参数。    
   
  style  
   
  日期格式样式,借以将   datetime   或   smalldatetime   数据转换为字符数据(nchar、nvarchar、char、varchar、nchar   或   nvarchar   数据类型);或者字符串格式样式,借以将   float、real、money   或   smallmoney   数据转换为字符数据(nchar、nvarchar、char、varchar、nchar   或   nvarchar   数据类型)。  
   
  SQL   Server   支持使用科威特算法的阿拉伯样式中的数据格式。  
   
  在表中,左侧的两列表示将   datetime   或   smalldatetime   转换为字符数据的   style   值。给   style   值加   100,可获得包括世纪数位的四位年份   (yyyy)。  
   
  不带世纪数位   (yy)   带世纪数位   (yyyy)    
  标准    
  输入/输出**    
  -   0   或   100   (*)     默认值   mon   dd   yyyy   hh:miAM(或   PM)    
  1   101   美国   mm/dd/yyyy    
  2   102   ANSI   yy.mm.dd    
  3   103   英国/法国   dd/mm/yy    
  4   104   德国   dd.mm.yy    
  5   105   意大利   dd-mm-yy    
  6   106   -   dd   mon   yy    
  7   107   -   mon   dd,   yy    
  8   108   -   hh:mm:ss    
  -   9   或   109   (*)     默认值   +   毫秒   mon   dd   yyyy   hh:mi:ss:mmmAM(或   PM)    
  10   110   美国   mm-dd-yy    
  11   111   日本   yy/mm/dd    
  12   112   ISO   yymmdd    
  -   13   或   113   (*)     欧洲默认值   +   毫秒   dd   mon   yyyy   hh:mm:ss:mmm(24h)    
  14   114   -   hh:mi:ss:mmm(24h)    
  -   20   或   120   (*)     ODBC   规范   yyyy-mm-dd   hh:mm:ss[.fff]    
  -   21   或   121   (*)     ODBC   规范(带毫秒)   yyyy-mm-dd   hh:mm:ss[.fff]    
  -   126(***)   ISO8601   yyyy-mm-dd   Thh:mm:ss:mmm(不含空格)    
  -   130*   科威特   dd   mon   yyyy   hh:mi:ss:mmmAM    
  -   131*   科威特   dd/mm/yy   hh:mi:ss:mmmAM    
   
   
  *         默认值(style   0   或   100、9   或   109、13   或   113、20   或   120、21   或   121)始终返回世纪数位   (yyyy)。  
  **   当转换为   datetime   时输入;当转换为字符数据时输出。  
  ***   专门用于   XML。对于从   datetime   或   smalldatetime   到   character   数据的转换,输出格式如表中所示。对于从   float、money   或   smallmoney   到   character   数据的转换,输出等同于   style   2。对于从   real   到   character   数据的转换,输出等同于   style   1。  
   
   
   
  重要     默认情况下,SQL   Server   根据截止年份   2049   解释两位数字的年份。即,两位数字的年份   49   被解释为   2049,而两位数字的年份   50   被解释为   1950。许多客户端应用程序(例如那些基于   OLE   自动化对象的客户端应用程序)都使用   2030   作为截止年份。SQL   Server   提供一个配置选项("两位数字的截止年份"),借以更改   SQL   Server   所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。  
   
   
  当从   smalldatetime   转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从   datetime   或   smalldatetime   值进行转换时,可以通过使用适当的   char   或   varchar   数据类型长度来截断不需要的日期部分。  
   
  下表显示了从   float   或   real   转换为字符数据时的   style   值。Top

2 楼aw511(点点星灯)回复于 2005-06-01 20:21:16 得分 0

select   getdate()  
  select   convert(varchar(20),getdate(),101)+'   '+right(convert(varchar(20),getdate(),108),5)  
  Top

3 楼aw511(点点星灯)回复于 2005-06-01 20:24:10 得分 0

--芬兰的日期格式如下dd/mm/yyyy   hh:mm  
   
  select   getdate()  
  select   convert(varchar(20),getdate(),101)+'   '+right(convert(varchar(20),getdate(),108),5)  
   
  --dd/mm/yyyy   hh:mm  
  select   convert(varchar(20),getdate(),103)+'   '+right(convert(varchar(20),getdate(),108),5)  
  Top

4 楼aw511(点点星灯)回复于 2005-06-01 20:25:37 得分 0

数据库中的值竟然是2005年6月5日,那是你更改了数据集中的数据,但是你没有更改数据库中的记录.  
   
  原因在于你的程序.好好查查.Top

5 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-01 21:43:00 得分 0

aw511(点点星灯)    
  写的几种转换都是错误的。  
   
  select   convert(varchar(20),getdate(),101)+'   '+right(convert(varchar(20),getdate(),108),5)  
  的结果是06/01/2005   38:39,是mm/dd/yyyy   mm:ss。  
   
  select   convert(varchar(20),getdate(),103)+'   '+right(convert(varchar(20),getdate(),108),5)  
  的结果是01/06/2005   39:19,是dd/mm/yyyy   mm:ss。  
   
  ---------------------------  
  dd/mm/yyyy   mm:ss应该是  
  Select   Convert(Varchar(10),GetDate(),103)+'   '+Convert(Varchar(5),GetDate(),108)  
  Top

6 楼jim138()回复于 2005-06-01 21:45:12 得分 0

up   upTop

7 楼jim138()回复于 2005-06-01 21:45:44 得分 0

同意   点点星灯Top

相关问题

  • 遇到了难题
  • 遇到难题了!!!
  • 急。遇到了难题
  • 又遇到难题了
  • 遇到一个难题
  • RealSDK 开发遇到难题
  • 写sql遇到难题了
  • 国际化问题???
  • 难题.难题.真是难...(关于新闻读出的格式问题)
  • 做entity bean遇到难题之三

关键词

  • 数据
  • 转换
  • 字符
  • 样式
  • 数据库
  • 格式
  • 年份
  • yyyy
  • getdate
  • dd

得分解答快速导航

  • 帖主:huangjianping

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo