关于日期处理的简单问题!

xxfeiyu 2001-06-14 11:19:00
这个问题很有意思
在VB中,IsDate("June 23,1998")=True
IsDate("June,1998")=True
IsDate("1998年12月2日")=True
IsDate("1998年12月")=True
IsDate("1998-12-23")=True
IsDate("1998-12")=True
IsDate("12/98")=True
IsDate("12/12/98")=True
这些日期,有些是没有带日期的,有些带了日期
现在我要这样
Dim X as string,Z as string
x=InputBox(Please Input a Date: )

Z=Format(X,"Long Date")
我需要这样:
输入 september,1998
得到 1998年9月
输入 1996-3-4
得到 1996年3月4日
输入 1998年12月
得到 1998年12月
输入 12/1998
得到 1998年12月

怎么做?



...全文
219 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxfeiyu 2001-06-30
  • 打赏
  • 举报
回复
大侠,我并不是这意思
我只是从技术的角度考虑问题
没有叫劲和争长短的问题
其实我也很感谢各位的热心帮助
很乐意和各位交朋友!
我的QQ:1752326
huanggx 2001-06-29
  • 打赏
  • 举报
回复
xxfeiyu(潇湘飞雨) 老弟,
我们大家看到你的帖子,就帮你想想如何解决。或许没有考虑周全。言语之中,或许说得不甚客气圆润,但总算是在帮你。
听你上面贴子的语气,似乎在较劲。在看出漏洞后,略带讽刺地反诘。
从技术角度来说,我上一个帖子的办法有漏洞,如果能给你提示,也算对你有帮助,如果已经是你抛弃的方法,那你也就一笑了之吧。
大家在此相互切磋,共同进步。如果我误会了你,还望你谅解。

huanggx 2001-06-29
  • 打赏
  • 举报
回复
确实疏忽了一月这个问题。如果你限制了用户输入日期的格式,那么判断起来就简单了。
假如你只允许用户输入yyyy/mm,和yyyy/mm/dd这两种格式,去掉日期字符串的左边5个字符,然后找“/”(分隔符)是否存在,如果不存在,就把日期中的日子去掉。
joeking 2001-06-28
  • 打赏
  • 举报
回复
我们的意思是强制用户使用一种格式输入,你就可以减少很多判断,因为datapicker控件这个控件是VB6的控件,使用鼠标输入日期,格式是固定的,所以会减少很多代码工作量,你看呢?而且现在很多用户也习惯鼠标(我的用户中习惯鼠标的,比熟键盘的多得多),我一直以为VB的长处在于快速编程,象你说的这个问题思考一下可以,但太纠缠了就钻了牛角尖。我对数据库熟,如果这种格式输入数据库的话,数据库也是根据计算机上控制面板中的日期格式来进行判断的。你打开一个ACCESS库新建一个日期字段试试就知道了。

------
我们大家话说得重了点吧?呵呵。我可没有你那么好学哦!
xxfeiyu 2001-06-28
  • 打赏
  • 举报
回复
没看明白
如:1998-1 和 1998-1-1
如何呢?
huanggx 2001-06-28
  • 打赏
  • 举报
回复
其实问题在于,当得到的日期是某年某月的一日的时候,你不知道到底用户输入的是月份还是年月日都输入了。如果这样,我们就把问题简单化:
假设 dateStr是用户输入的日期字符串
DateFld是你转换后获得的日期变量
是否可以这样:
当Day(DateFld)=1的时候,获得DateStr中所有的1。
如果没有1,则:DateFld = # CStr(Year(DateFld) & "-" & CStr(Month(DateFld)) #
如果有1,则看看其是否与分割符相邻(如果左相邻,则右边不能有除分隔符以外的字符;如果右相邻,则左边不能有分隔符以外的字符),若如此,则日期不变,否则:DateFld = # CStr(Year(DateFld) & "-" & CStr(Month(DateFld)) #
xxfeiyu 2001-06-28
  • 打赏
  • 举报
回复
我知道你的意思。
因爲中国人的输入习惯,我想知道用户输入的日期是指定到某一天还是某一个月
如:
我要的是“发案时间”,可能是1998年9月(不知道那一天),也可能是1998年9月1日(确定的日期),如何在用户输入的时候区分他们。
用户输入了 1998-9 当然是指月份而不是日期
用户输入了 1998-9-1 当然是指日期而不是指月份
但在日期类型之中 Day()函数都返回 1
如何区别他们
这两种输入都是合法的阿。
xxfeiyu 2001-06-27
  • 打赏
  • 举报
回复
其实不是这个意思
我只要想知道输入的成分中包含了日期没有,
或者说通过什么办法判断一个日期字符串中是否包含了日期。
简单的说
1998-9 和 1998-9-1 的区别
September 1,1998 和 September,1998 的区别
等等
输入的日期格式并不重要

joeking 2001-06-26
  • 打赏
  • 举报
回复
大侠说的对,VB做东东虽然容易,必要的劳动还是要付出的。
huanggx 2001-06-25
  • 打赏
  • 举报
回复
你什么都不想判断,你又要求高,谁也做不到。这样的问题用不着花太多的精力来对待。如果你的程序是在中国使用,没有人会输入Semptember,1998这样的日期,也不大会有人输入1998年12月21日这样的日期,一般只会输入19981231或者1998/12/31。如果你为了严格,可以强制按照某种格式输入,或者可以用日期控件。总之有很多办法。就是系统提供的有些函数,比如CDate,也是做了很多判断的。比如,你输入11/12,你说是11月12日还是12月11日?CDate是按照11月12日来转换的。这也说明,系统函数也是有强制的,或者说约定的。如果你也允许用户这样输入,请问,你怎么判断?不强制输入格式,又想永远得到正确的内容是不可能的,永远不可能!
xxfeiyu 2001-06-25
  • 打赏
  • 举报
回复
A
enmity 2001-06-22
  • 打赏
  • 举报
回复
gz
kyuwong 2001-06-21
  • 打赏
  • 举报
回复
kyuwong 2001-06-21
  • 打赏
  • 举报
回复
joeking 2001-06-21
  • 打赏
  • 举报
回复
我想有以下几个方法:
一,输入时强制用户使用一种格式
二,只有循环所有的格式来处理了,不过,第一不能掉格式,第二,速度可就……嘿嘿
bucher 2001-06-21
  • 打赏
  • 举报
回复
用datapicker控件
xxfeiyu 2001-06-20
  • 打赏
  • 举报
回复
jiami 2001-06-20
  • 打赏
  • 举报
回复
先判断输入的格式,在调用其相应的处理事件
xxfeiyu 2001-06-20
  • 打赏
  • 举报
回复
xxfeiyu 2001-06-18
  • 打赏
  • 举报
回复
加载更多回复(8)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧