17405867cSopenharmony_ci/* 27405867cSopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 37405867cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47405867cSopenharmony_ci * you may not use this file except in compliance with the License. 57405867cSopenharmony_ci * You may obtain a copy of the License at 67405867cSopenharmony_ci * 77405867cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87405867cSopenharmony_ci * 97405867cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107405867cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117405867cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127405867cSopenharmony_ci * See the License for the specific language governing permissions and 137405867cSopenharmony_ci * limitations under the License. 147405867cSopenharmony_ci */ 157405867cSopenharmony_ci#include "time_util.h" 167405867cSopenharmony_ci 177405867cSopenharmony_ci#include <chrono> 187405867cSopenharmony_ci#include <ctime> 197405867cSopenharmony_ci#include <sys/time.h> 207405867cSopenharmony_ci 217405867cSopenharmony_cinamespace OHOS { 227405867cSopenharmony_cinamespace HiviewDFX { 237405867cSopenharmony_cinamespace TimeUtil { 247405867cSopenharmony_cinamespace { 257405867cSopenharmony_ciconst std::string DEFAULT_DATE = "19700101"; 267405867cSopenharmony_ci} 277405867cSopenharmony_ciuint64_t GetMilliseconds() 287405867cSopenharmony_ci{ 297405867cSopenharmony_ci auto now = std::chrono::system_clock::now(); 307405867cSopenharmony_ci auto millisecs = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()); 317405867cSopenharmony_ci return millisecs.count(); 327405867cSopenharmony_ci} 337405867cSopenharmony_ci 347405867cSopenharmony_cistd::string GetDate() 357405867cSopenharmony_ci{ 367405867cSopenharmony_ci time_t nowTime = time(nullptr); 377405867cSopenharmony_ci if (nowTime < 0) { 387405867cSopenharmony_ci return DEFAULT_DATE; 397405867cSopenharmony_ci } 407405867cSopenharmony_ci char dateChs[9] = { 0 }; // 9 means 8(19700101) + 1('\0') 417405867cSopenharmony_ci struct tm localTm; 427405867cSopenharmony_ci if (localtime_r(&nowTime, &localTm) == nullptr) { 437405867cSopenharmony_ci return DEFAULT_DATE; 447405867cSopenharmony_ci } 457405867cSopenharmony_ci if (strftime(dateChs, sizeof(dateChs), "%Y%m%d", &localTm) == 0) { 467405867cSopenharmony_ci return DEFAULT_DATE; 477405867cSopenharmony_ci } 487405867cSopenharmony_ci return dateChs; 497405867cSopenharmony_ci} 507405867cSopenharmony_ci 517405867cSopenharmony_cistd::string GetTimeZone() 527405867cSopenharmony_ci{ 537405867cSopenharmony_ci struct timeval tv; 547405867cSopenharmony_ci if (gettimeofday(&tv, nullptr) != 0) { 557405867cSopenharmony_ci return ""; 567405867cSopenharmony_ci } 577405867cSopenharmony_ci time_t sysSec = tv.tv_sec; 587405867cSopenharmony_ci struct tm tmLocal; 597405867cSopenharmony_ci if (localtime_r(&sysSec, &tmLocal) == nullptr) { 607405867cSopenharmony_ci return ""; 617405867cSopenharmony_ci } 627405867cSopenharmony_ci constexpr size_t buffSize = 6; // for '+0800\0' 637405867cSopenharmony_ci char buff[buffSize] = {0}; 647405867cSopenharmony_ci if (strftime(buff, buffSize, "%z", &tmLocal) == 0) { 657405867cSopenharmony_ci return ""; 667405867cSopenharmony_ci } 677405867cSopenharmony_ci return std::string(buff); 687405867cSopenharmony_ci} 697405867cSopenharmony_ci} // namespace TimeUtil 707405867cSopenharmony_ci} // namespace HiviewDFX 717405867cSopenharmony_ci} // namespace OHOS 72