Foxtable(狐表)用户栏目专家坐堂 → [分享]再谈系统日期格式冲突


  共有4042人关注过本帖树形打印复制链接

主题:[分享]再谈系统日期格式冲突

帅哥哟,离线,有人找我吗?
wyz20130512
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
[分享]再谈系统日期格式冲突  发帖心情 Post By:2016/11/28 21:45:00 [只看该作者]

晚上看以前的Foxtable笔记时,发现以前学习时,已记录了一个如何修正系统日期的方法,代码更简捷:


'代码写入项目BeforeOpenProject事件中
Dim d As Date = Date.Today
Dim s As String = CStr(d)
Dim l As Integer = s.Length
If l > 10 Then '判断系统日期是否符合标准
    Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International","sShortDate","yyyy-MM-dd")

    e.Cancel = True
    e.HideSplashForm = True
    MessageBox.Show("程序将自动关闭,以校对系统日期格式!" & vbcrlf & "而后请重新启动程序","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Syscmd.Project.Exit()
End If

比下面的:1.代码简捷;2.不用设置全局代码3.等效.


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/11/28 21:59:00 [只看该作者]

win10测试可以,长日期可以改为

Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International","sLongDate","yyyy-MM-dd")

 回到顶部
帅哥哟,离线,有人找我吗?
wyz20130512
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
回复:(有点蓝)win10测试可以,长日期可以改为Regis...  发帖心情 Post By:2016/11/28 22:45:00 [只看该作者]

感谢"有点蓝"大师的补充,这下就完美了.我是在Win7下测试通过的.

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2016/11/29 8:08:00 [只看该作者]

要是每个软件都来改一下,不是乱套了嘛?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/11/29 8:58:00 [只看该作者]

一个,是foxtable本身有问题,对于日期的处理,要考虑长日期的问题。

 

再一个,是,自己编写代码的时候,要考虑日期格式的问题。

 

当然,修改系统的日期格式,是最简单也是最粗暴的方式。


 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2016/11/29 9:32:00 [只看该作者]

这个和狐表应该没啥关系。


我只想建议,尽量别用直接修改系统时间的方法(别的程序也许对时间格式也会有要求)

而是通过DateTimeFormatInfo的CurrentInfo属性来控制

比如网上抄来的代码:AfterOpenProject

Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo

Dim DateInfo As System.Reflection.FieldInfo = cd.Gettype.GetField("generalLongTimePattern", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)

If  DateInfo IsNot Nothing Then
    DateInfo.SetValue(cd, "yyyy-MM-dd HH:mm:ss")
End If

或者一个个设

cd.ShortDatePattern = "yyyy年MM月dd日"


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/11/29 9:42:00 [只看该作者]

同意楼上,能用代码解决的,就尽量不要动操作系统。6楼的方式更好

 回到顶部
帅哥哟,离线,有人找我吗?
wyz20130512
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
回复:(逛逛)这个和狐表应该没啥关系。我只想建议,...  发帖心情 Post By:2016/11/29 12:22:00 [只看该作者]

可我的BeforeLoadInnerTable事件设置了只加载指定日期的数据,若操作系统的日期格式不是标准格式,按你的代码还是报错!

图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable14.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable13.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
oaok
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1198 积分:7859 威望:0 精华:0 注册:2013/5/17 14:26:00
  发帖心情 Post By:2016/11/29 12:59:00 [只看该作者]

用户已经被屏蔽

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2016/11/29 13:03:00 [只看该作者]

定义一个变量,在出错的事件最上面,检查一下是否已经定义了时间格式,没有得话,定义一下就行了。

比如:BeforeLoadInnerTable 事件
定义一个变量Vars("ddd") = false
If Vars("ddd") = False Then
    Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo
    Dim DateInfo As System.Reflection.FieldInfo = cd.Gettype.GetField("generalLongTimePattern", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)  
    If  DateInfo IsNot Nothing Then
        DateInfo.SetValue(cd, "yyyy-MM-dd HH:mm:ss")
    End If
    Vars("ddd") = True
End If

下面写你的代码


 回到顶部
总数 15 1 2 下一页