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 #include "oox/helper/datetimehelper.hxx" 23 24 #include <math.h> 25 26 namespace oox { 27 28 // ============================================================================ 29 30 using namespace ::com::sun::star::util; 31 32 using ::rtl::OUString; 33 34 // ============================================================================ 35 36 bool parseISO8601DateTime( OUString &aValue, DateTime &dateTime ) 37 { 38 bool bValid = (aValue.getLength() >= 19) && (aValue[ 4 ] == '-') && (aValue[ 7 ] == '-') && 39 (aValue[ 10 ] == 'T') && (aValue[ 13 ] == ':') && (aValue[ 16 ] == ':'); 40 if( bValid ) 41 { 42 dateTime.Year = static_cast< sal_uInt16 >( aValue.copy( 0, 4 ).toInt32() ); 43 dateTime.Month = static_cast< sal_uInt16 >( aValue.copy( 5, 2 ).toInt32() ); 44 dateTime.Day = static_cast< sal_uInt16 >( aValue.copy( 8, 2 ).toInt32() ); 45 dateTime.Hours = static_cast< sal_uInt16 >( aValue.copy( 11, 2 ).toInt32() ); 46 dateTime.Minutes = static_cast< sal_uInt16 >( aValue.copy( 14, 2 ).toInt32() ); 47 double seconds = aValue.copy( 17 ).toDouble(); 48 dateTime.Seconds = static_cast< sal_uInt16 >( floor( seconds ) ); 49 dateTime.HundredthSeconds = static_cast< sal_uInt16 >( round ( 100 * ( seconds - floor( seconds ) ) ) ); 50 } 51 return bValid; 52 } 53 54 // ============================================================================ 55 56 } // namespace oox 57