现在有个vb5.0的老系统,部署在很多国家. 我发现Date类型的变量总是显示当前区域的默认时间格式,比如法国就是"dd/mm/yyyy hh:mm:ss". 如果windows的 格式和区域都选法国,下面的代码就无法得到需要的时间格式.Dim lsDate As Date
lsDate = Format("2008-07-01 01:01:01", "yyyy-mm-dd hh:mm:ss")
Msgbox lsDate得到的格式还是"01/07/2008 01:01:01",也就是系统默认当前区域的时间格式。如果lsDate是String就没有这个问题,可是我不可能把现有的很多变量类型都改掉啊。不知道有什么好的解决方法。

解决方案 »

  1.   

    Dim lsDate As Date 
    lsDate = now
    Msgbox Format(lsDate , "yyyy-mm-dd hh:mm:ss") 
    日期格式应该是打印或者显示出来的时候才有意义,转化成String也没什么问题啊
      

  2.   

    lsDate = Format("2008-07-01 01:01:01", "yyyy-mm-dd hh:mm:ss") 
    这句代码没有意义.日期型数据存放的是日期,没有格式.
    Format函数返回的是字符型
      

  3.   

    Date 类型是表示存储日期值的一种数据结构;而字符串格式 "2008-07-01 01:01:01" 或 "01/07/2008 01:01:01" 只是按不同的习惯对该值的描述,对值的存储不没有影响。举例来说:楼主手里拿着碗筷,那么:
    ·楼主左手拿碗右手拿筷
    ·楼主右手拿筷左手拿碗
    这两种描述是完全等价的,对楼主如何拿碗筷没任何影响。
      

  4.   


    按照MS的公开文档,
    Date类型的变量就是显示当前区域的默认时间格式。LZ如果需要统一显示形式,
    显示之前用FORMAT格式化一下就是了。
    或者,
    如果用户允许的话,
    调用API修改“当前区域的默认时间格式”为你要的格式就好了。
      

  5.   

    所以我说前提是“如果用户允许的话”,
    一般来说正确的做法应该是表示前格式化为需要的格式,要保存重复利用的话就保存到STRING变量中。
    资料1(MSDN中对“Date 数据类型”的描述):
    Date 数据类型
    Date 变量存储为 IEEE 64 位(8 个字节)浮点数值形式,其可以表示的日期范围从 100 年 1 月 1 日到 9999 年 12 月 31 日,而时间可以从 0:00:00 到 23:59:59。任何可辨认的文本日期都可以赋值给 Date 变量。日期文字须以数字符号 (#) 扩起来,例如,#January 1, 1993# 或 #1 Jan 93#。
    Date 变量会根据计算机中的短日期格式来显示。时间则根据计算机的时间格式(12 或 24 小时制)来显示。
    当其他的数值类型要转换为 Date 型时,小数点左边的值表示日期信息,而小数点右边的值则表示时间。午夜为 0 而中午为 0.5。负整数表示 1899 年 12 月 30 日之前的日期。--注意红色部分,人家白纸黑字地写了“Date 变量会根据计算机中的短日期格式来显示。时间则根据计算机的时间格式(12 或 24 小时制)来显示。”。