⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_datetime.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:

    if (t->nSec > 59)
    {
        return KAL_FALSE;
    }

    return KAL_TRUE;

}


/*****************************************************************************
 * FUNCTION
 *  applib_dt_is_dst_enabled
 * DESCRIPTION
 *  Tp check if daylight saving time is enabled
 * PARAMETERS
 *  void
 *  t  time to be computed(?)
 * RETURNS
 *  TURE if enabled; otherwise, false
 *****************************************************************************/
kal_bool applib_dt_is_dst_enabled(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    return (kal_bool) mmi_dt_is_dst();
}


/*****************************************************************************
 * FUNCTION
 *  applib_dt_get_tz_string
 * DESCRIPTION
 *  Get timezone information of home city in +/- xx:xx format
 * PARAMETERS
 *  result      [IN/OUT]        String pointer to store the result
 * RETURNS
 *  void
 *****************************************************************************/
void applib_dt_get_tz_string(kal_char *result)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_char tmpBuff[40];
    kal_int16 homeTimeZone = (kal_int16) (GetTimeZone(PhnsetGetHomeCity()) * 4);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (homeTimeZone < 0)
    {
        homeTimeZone = 0 - homeTimeZone;
        sprintf(tmpBuff, "-%02d%02d", (homeTimeZone / 4), (homeTimeZone % 4) * 15);
    }
    else
    {
        sprintf(tmpBuff, "+%02d%02d", (homeTimeZone / 4), (homeTimeZone % 4) * 15);
    }

    strcpy(result, tmpBuff);
}


/*****************************************************************************
 * FUNCTION
 *  applib_dt_conv_utc_to_local
 * DESCRIPTION
 *  compute utc time to local time
 * PARAMETERS
 *  tz              [IN]        Time zone
 *  utc_time        [IN]        Utc time
 * RETURNS
 *  result of time
 *****************************************************************************/
t_rtc applib_dt_conv_utc_to_local(float tz, t_rtc *utc_time)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    t_rtc outcome;
    applib_time_struct origin_t;
    applib_time_struct result_t;

    float home_tz = GetTimeZone(PhnsetGetHomeCity());

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    tz = home_tz - tz;

    origin_t.nYear = utc_time->rtc_year + YEARFORMATE;
    origin_t.nMonth = utc_time->rtc_mon;
    origin_t.nDay = utc_time->rtc_day;
    origin_t.nHour = utc_time->rtc_hour;
    origin_t.nMin = utc_time->rtc_min;
    origin_t.nSec = utc_time->rtc_sec;

    result_t = applib_dt_utc_to_rtc(tz, &origin_t);

    outcome.rtc_year = result_t.nYear - YEARFORMATE;
    outcome.rtc_mon = result_t.nMonth;
    outcome.rtc_day = result_t.nDay;
    outcome.rtc_hour = result_t.nHour;
    outcome.rtc_min = result_t.nMin;
    outcome.rtc_sec = result_t.nSec;
    outcome.rtc_wday = result_t.DayIndex;

    return outcome;
}


/*****************************************************************************
 * FUNCTION
 *  applib_dt_mytime_2_utc_sec
 * DESCRIPTION
 *  convert applib_time_struct format of time to seconds after 1970/1/1
 * PARAMETERS
 *  currTime        [?]     
 *  daylightSaving  [IN]    If daylight saving should be considered.
 * RETURNS
 *  void
 *****************************************************************************/
kal_uint32 applib_dt_mytime_2_utc_sec(applib_time_struct *currTime, kal_bool daylightSaving)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint16 i;
    kal_uint32 no_of_days = 0;
    kal_int32 utc_time;
    kal_int32 is_leap;
    kal_uint8 dst;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (currTime->nYear < DT_UTC_BASE_YEAR)
    {
        return 0;
    }

    /* year */
    for (i = DT_UTC_BASE_YEAR; i < currTime->nYear; i++)
    {
        no_of_days += (365 + applib_dt_is_leap_year(i));
    }

    /* month */
    is_leap = applib_dt_is_leap_year(currTime->nYear);
    for (i = 1; i < currTime->nMonth; i++)
    {
        no_of_days += applib_dt_last_day_of_mon((kal_uint8) i, currTime->nYear);
    }

    /* day */
    no_of_days += (currTime->nDay - 1);

    /* sec */
    utc_time =
        (kal_uint32) no_of_days *DT_SEC_PER_DAY + (kal_uint32) (currTime->nHour * DT_SEC_PER_HOUR +
                                                                currTime->nMin * DT_SEC_PER_MIN + currTime->nSec);

    dst = applib_dt_is_dst_enabled();

    if (dst && daylightSaving)
    {
        utc_time -= DT_SEC_PER_HOUR;
    }
    return utc_time;
}


/*****************************************************************************
 * FUNCTION
 *  applib_dt_utc_sec_2_mytime
 * DESCRIPTION
 *  convert from UTC second to applib_time_struct struct
 * PARAMETERS
 *  utc_sec     [IN]        Uct_sec
 *  result      [IN]        Result of time
 *  daylightSaving  [IN]    If daylight saving should be considered.
 * RETURNS
 *  KAL_TRUE if success; otherwise, KAL_FALSE.
 *****************************************************************************/
kal_uint8 applib_dt_utc_sec_2_mytime(kal_uint32 utc_sec, applib_time_struct *result, kal_bool daylightSaving)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 sec, day;
    kal_uint16 y;
    kal_uint8 m;
    kal_uint16 d;
    kal_uint8 dst;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    dst = applib_dt_is_dst_enabled();

    if (dst && daylightSaving)
    {
        utc_sec += DT_SEC_PER_HOUR;
    }

    /* hour, min, sec */
    /* hour */
    sec = utc_sec % DT_SEC_PER_DAY;
    result->nHour = sec / DT_SEC_PER_HOUR;

    /* min */
    sec %= DT_SEC_PER_HOUR;
    result->nMin = sec / DT_SEC_PER_MIN;

    /* sec */
    result->nSec = sec % DT_SEC_PER_MIN;

    /* year, month, day */
    /* year */
    /* year */
    day = utc_sec / DT_SEC_PER_DAY;
    for (y = DT_UTC_BASE_YEAR; day > 0; y++)
    {
        d = (DT_DAY_PER_YEAR + applib_dt_is_leap_year(y));
        if (day >= d)
        {
            day -= d;
        }
        else
        {
            break;
        }
    }
    result->nYear = y;

    for (m = 1; m < DT_MONTH_PER_YEAR; m++)
    {
        d = applib_dt_last_day_of_mon(m, y);
        if (day >= d)
        {
            day -= d;
        }
        else
        {
            break;
        }
    }

    result->nMonth = m;
    result->nDay = (kal_uint8) (day + 1);

    return KAL_TRUE;
}

 


/*****************************************************************************
 * FUNCTION
 *  applib_dt_rfc1123_rfc850_asctime_dateString2Time
 * DESCRIPTION
 *  This function is used to convert rfc1123, rfc850 and asctime date string to time seconds.
 * PARAMETERS
 *  date            [IN]            
 *  time            [IN/OUT]        The time seconds for date_str
 *  date_str(?)     [IN]            The rfc1123 date string
 * RETURNS
 *  KAL_TRUE: Success
 *  KAL_FALSE: Wrong Format
 *****************************************************************************/
kal_bool applib_dt_rfc1123_rfc850_asctime_dateString2Time(const kal_char *date, kal_uint32 *time)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint16 year = 0;
    kal_uint16 month = 0;
    kal_uint16 day = 0;
    kal_uint16 wkday = 0;
    kal_uint16 hours = 0;
    kal_uint16 mins = 0;
    kal_uint16 secs = 0;
    kal_uint16 leap_year = 0;

    kal_char *str1, *str2, *pp;
    kal_uint32 i;
    kal_char date_str[100];

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (date == NULL || strlen(date) > 99)
    {
        return KAL_FALSE;
    }
    else
    {
        strcpy(date_str, date);
    }
    if ((str1 = strchr(date_str, ',')) != NULL)
    {

        *str1 = '\0';
        str1++;

        /* The date_string may be rfc1123 or rfc850 date string */
        for (i = 0; i < 7; i++)
        {
            if (strcmp(date_str, weekday_c[i]) == 0 || strcmp(date_str, weekday_f[i]) == 0)
            {
                wkday = i;
                if (i == 0)
                {
                    wkday = 7;
                }
            }
        }
        if (wkday == 0) /* Wrong date format */
        {
            return KAL_FALSE;
        }

        str1++; /* Ingore one space */
        if (strchr(str1, '-') != NULL)
        {
            /* The date_string may be rfc850 date string */
            /* Retrieve day */
            if (NULL == (str2 = kal_strtok_r(str1, "-", &pp)))
            {
                return KAL_FALSE;
            }
            day = atoi(str2);

            /* Retrieve month */
            if (NULL == (str2 = kal_strtok_r(NULL, "-", &pp)))
            {
                return KAL_FALSE;
            }
            for (i = 0; i < 12; i++)
            {
                if (strcmp(str2, months_c[i]) == 0 || strcmp(str2, months_f[i]) == 0)
                {
                    month = i;
                    if (i == 0)
                    {
                        month = 12;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -