1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_connectivity.hxx" 26 27 #include "file/FDateFunctions.hxx" 28 #include <tools/date.hxx> 29 #include <tools/time.hxx> 30 #include <tools/datetime.hxx> 31 32 using namespace connectivity; 33 using namespace connectivity::file; 34 //------------------------------------------------------------------ 35 ORowSetValue OOp_DayOfWeek::operate(const ORowSetValue& lhs) const 36 { 37 if ( lhs.isNull() ) 38 return lhs; 39 40 sal_Int32 nRet = 0; 41 ::com::sun::star::util::Date aD = lhs; 42 Date aDate(aD.Day,aD.Month,aD.Year); 43 DayOfWeek eDayOfWeek = aDate.GetDayOfWeek(); 44 switch(eDayOfWeek) 45 { 46 case MONDAY: 47 nRet = 2; 48 break; 49 case TUESDAY: 50 nRet = 3; 51 break; 52 case WEDNESDAY: 53 nRet = 4; 54 break; 55 case THURSDAY: 56 nRet = 5; 57 break; 58 case FRIDAY: 59 nRet = 6; 60 break; 61 case SATURDAY: 62 nRet = 7; 63 break; 64 case SUNDAY: 65 nRet = 1; 66 break; 67 default: 68 OSL_ENSURE(0,"Error in enum values for date"); 69 } 70 return nRet; 71 } 72 //------------------------------------------------------------------ 73 ORowSetValue OOp_DayOfMonth::operate(const ORowSetValue& lhs) const 74 { 75 if ( lhs.isNull() ) 76 return lhs; 77 78 ::com::sun::star::util::Date aD = lhs; 79 return static_cast<sal_Int16>(aD.Day); 80 } 81 //------------------------------------------------------------------ 82 ORowSetValue OOp_DayOfYear::operate(const ORowSetValue& lhs) const 83 { 84 if ( lhs.isNull() ) 85 return lhs; 86 87 ::com::sun::star::util::Date aD = lhs; 88 Date aDate(aD.Day,aD.Month,aD.Year); 89 return static_cast<sal_Int16>(aDate.GetDayOfYear()); 90 } 91 //------------------------------------------------------------------ 92 ORowSetValue OOp_Month::operate(const ORowSetValue& lhs) const 93 { 94 if ( lhs.isNull() ) 95 return lhs; 96 97 ::com::sun::star::util::Date aD = lhs; 98 return static_cast<sal_Int16>(aD.Month); 99 } 100 //------------------------------------------------------------------ 101 ORowSetValue OOp_DayName::operate(const ORowSetValue& lhs) const 102 { 103 if ( lhs.isNull() ) 104 return lhs; 105 106 ::rtl::OUString sRet; 107 ::com::sun::star::util::Date aD = lhs; 108 Date aDate(aD.Day,aD.Month,aD.Year); 109 DayOfWeek eDayOfWeek = aDate.GetDayOfWeek(); 110 switch(eDayOfWeek) 111 { 112 case MONDAY: 113 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Monday")); 114 break; 115 case TUESDAY: 116 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tuesday")); 117 break; 118 case WEDNESDAY: 119 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Wednesday")); 120 break; 121 case THURSDAY: 122 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Thursday")); 123 break; 124 case FRIDAY: 125 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Friday")); 126 break; 127 case SATURDAY: 128 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Saturday")); 129 break; 130 case SUNDAY: 131 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Sunday")); 132 break; 133 default: 134 OSL_ENSURE(0,"Error in enum values for date"); 135 } 136 return sRet; 137 } 138 //------------------------------------------------------------------ 139 ORowSetValue OOp_MonthName::operate(const ORowSetValue& lhs) const 140 { 141 if ( lhs.isNull() ) 142 return lhs; 143 144 ::rtl::OUString sRet; 145 ::com::sun::star::util::Date aD = lhs; 146 switch(aD.Month) 147 { 148 case 1: 149 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("January")); 150 break; 151 case 2: 152 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("February")); 153 break; 154 case 3: 155 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("March")); 156 break; 157 case 4: 158 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("April")); 159 break; 160 case 5: 161 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("May")); 162 break; 163 case 6: 164 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("June")); 165 break; 166 case 7: 167 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("July")); 168 break; 169 case 8: 170 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("August")); 171 break; 172 case 9: 173 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("September")); 174 break; 175 case 10: 176 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("October")); 177 break; 178 case 11: 179 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("November")); 180 break; 181 case 12: 182 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("December")); 183 break; 184 } 185 return sRet; 186 } 187 //------------------------------------------------------------------ 188 ORowSetValue OOp_Quarter::operate(const ORowSetValue& lhs) const 189 { 190 if ( lhs.isNull() ) 191 return lhs; 192 193 sal_Int32 nRet = 1; 194 ::com::sun::star::util::Date aD = lhs; 195 Date aDate(aD.Day,aD.Month,aD.Year); 196 if ( aD.Month >= 4 && aD.Month < 7 ) 197 nRet = 2; 198 else if ( aD.Month >= 7 && aD.Month < 10 ) 199 nRet = 3; 200 else if ( aD.Month >= 10 && aD.Month <= 12 ) 201 nRet = 4; 202 return nRet; 203 } 204 //------------------------------------------------------------------ 205 ORowSetValue OOp_Week::operate(const ::std::vector<ORowSetValue>& lhs) const 206 { 207 if ( lhs.empty() || lhs.size() > 2 ) 208 return ORowSetValue(); 209 210 size_t nSize = lhs.size(); 211 212 ::com::sun::star::util::Date aD = lhs[nSize-1]; 213 Date aDate(aD.Day,aD.Month,aD.Year); 214 215 sal_Int16 nStartDay = SUNDAY; 216 if ( nSize == 2 && !lhs[0].isNull() ) 217 nStartDay = lhs[0]; 218 219 return static_cast<sal_Int16>(aDate.GetWeekOfYear(static_cast<DayOfWeek>(nStartDay))); 220 } 221 // ----------------------------------------------------------------------------- 222 ORowSetValue OOp_Year::operate(const ORowSetValue& lhs) const 223 { 224 if ( lhs.isNull() ) 225 return lhs; 226 227 ::com::sun::star::util::Date aD = lhs; 228 return static_cast<sal_Int16>(aD.Year); 229 } 230 //------------------------------------------------------------------ 231 ORowSetValue OOp_Hour::operate(const ORowSetValue& lhs) const 232 { 233 if ( lhs.isNull() ) 234 return lhs; 235 236 ::com::sun::star::util::Time aT = lhs; 237 return static_cast<sal_Int16>(aT.Hours); 238 } 239 //------------------------------------------------------------------ 240 ORowSetValue OOp_Minute::operate(const ORowSetValue& lhs) const 241 { 242 if ( lhs.isNull() ) 243 return lhs; 244 245 ::com::sun::star::util::Time aT = lhs; 246 return static_cast<sal_Int16>(aT.Minutes); 247 } 248 //------------------------------------------------------------------ 249 ORowSetValue OOp_Second::operate(const ORowSetValue& lhs) const 250 { 251 if ( lhs.isNull() ) 252 return lhs; 253 254 ::com::sun::star::util::Time aT = lhs; 255 return static_cast<sal_Int16>(aT.Seconds); 256 } 257 //------------------------------------------------------------------ 258 ORowSetValue OOp_CurDate::operate(const ::std::vector<ORowSetValue>& lhs) const 259 { 260 if ( !lhs.empty() ) 261 return ORowSetValue(); 262 263 Date aCurDate; 264 return ::com::sun::star::util::Date(aCurDate.GetDay(),aCurDate.GetMonth(),aCurDate.GetYear()); 265 } 266 //------------------------------------------------------------------ 267 ORowSetValue OOp_CurTime::operate(const ::std::vector<ORowSetValue>& lhs) const 268 { 269 if ( !lhs.empty() ) 270 return ORowSetValue(); 271 272 Time aCurTime; 273 return ::com::sun::star::util::Time(aCurTime.Get100Sec(),aCurTime.GetSec(),aCurTime.GetMin(),aCurTime.GetHour()); 274 } 275 //------------------------------------------------------------------ 276 ORowSetValue OOp_Now::operate(const ::std::vector<ORowSetValue>& lhs) const 277 { 278 if ( !lhs.empty() ) 279 return ORowSetValue(); 280 281 DateTime aCurTime; 282 return ::com::sun::star::util::DateTime(aCurTime.Get100Sec(),aCurTime.GetSec(),aCurTime.GetMin(),aCurTime.GetHour(), 283 aCurTime.GetDay(),aCurTime.GetMonth(),aCurTime.GetYear()); 284 } 285 //------------------------------------------------------------------ 286