1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef OHOS_GLOBAL_I18N_DATE_TIME_SEQUENCE_H
16 #define OHOS_GLOBAL_I18N_DATE_TIME_SEQUENCE_H
17 
18 #include <string>
19 #include <unordered_map>
20 
21 namespace OHOS::Ace {
22 
23 struct OrderResult {
24     /**
25      * the year,month and day sequence,
26      * empty value represent call interface failed
27      */
28     std::string dateOrder;
29 
30     /**
31      * 0 represent time position, 1 represent date position
32      * -1 represent call interface failed
33      */
34     std::string dateTimeOrder;
35 
36     /**
37      * 0 represent am/pm position, 1 represent time position
38      * -1 represent call interface failed
39      */
40     std::string amPmTimeOrder;
41 
42     // whether datetime format string starts with zero
43     bool startsWithZero;
44 };
45 
46 class DateTimeSequence {
47 public:
48    static OrderResult GetDateOrder(const std::string& locale);
49    static OrderResult GetDateTimeOrder(const std::string& locale);
50    static OrderResult GetAmPmTimeOrder(const std::string& locale);
51 
52 private:
53    static std::string ModifyOrder(std::string& pattern);
54    static void ProcessNormal(char ch, int* order, size_t orderSize, int* lengths, size_t lengsSize);
55 };
56 } // namespace OHOS::Ace
57 #endif