我有一个unix和一个linux服务器分别用作数据库服务器和应用服务器。 数据库是Oracle 10g,App Server是安装了jRockit 1.5的Weblogic 9.3 MP3。 我在weblogic服务器中创建了一个连接池。
我尝试用四种不同的方式从NLS_DATABASE_PARAMETERS,NLS_SESSION_PARAMETERS和NLS_INSTANCE_PARAMETERS表中读取NLS_DATE_FORMAT。
我没有在我的环境中的任何地方(在数据库服务器上,在应用服务器上或在PC上)设置NLS_LANG或NLS_DATE_FORMAT。 init.ora具有DD-MON-YYYY设置。
因此,在服务器上执行java代码时,NLS_DATE_FORMAT会有什么不同。
答案 0 :(得分:4)
很难说没有看到任何代码就会发生什么,但你根本不应该依赖数据库日期格式。您应该将日期/时间戳值作为对象获取 - 然后您可以根据需要对它们进行格式化。从根本上说,你没有存储字符串 - 你要存储日期或时间戳。我自然可以写成“19/06/1976”的日期可能由其他人写成“06-19-1976” - 但两者都代表同一日期。
这就像询问数据库是使用十六进制还是十进制来存储整数:它们也没有这样做,只要我们应该关心:它自己存储整数。将数字视为数字,将日期视为日期,将时间戳视为时间戳等,并且当您想要向用户显示某些内容时,请为该用户选择最合适的格式。
答案 1 :(得分:1)
据我所知,JDBC驱动程序会将NLS设置调整为Java的系统属性user.locale
设置为的任何值。
因此,应用程序服务器的区域设置和您的lokal PC之间可能存在很大差异。
答案 2 :(得分:0)
“NLS_SESSION_PARAMETERS表将其显示为DD-MON-RR”
这种格式是,或者至少应该被弃用。它是在九十年代后期引入的,作为Y2K问题的重要组成部分。它的目的是将一个世纪追加到仅作为YY输入的日期。它使用窗口算法来确定YY是否需要一个19或20世纪。枢轴是固定的 - 49 - 因此日历滚动分配变得越来越不令人满意。
事实上,你得到的是0011而不是2011年的日期建议你有持续的Y2K问题。空间不再是问题,没有明确指定完整YYYY格式的借口。