HRESULT Library_spot_native_Microsoft_SPOT_Hardware_Utility::SetLocalTime___STATIC__VOID__mscorlibSystemDateTime( CLR_RT_StackFrame& stack )
{
    NATIVE_PROFILE_CLR_CORE();
    TINYCLR_HEADER();
    CLR_INT64 utc = 0;
    INT64 utcBefore;
    INT64 utcNow;

    CLR_INT64* val = Library_corlib_native_System_DateTime::GetValuePtr( stack.Arg0() ); FAULT_ON_NULL(val);

    utc = *val - TIME_ZONE_OFFSET;
        
    utcBefore = Time_GetUtcTime();
    utcNow = Time_SetUtcTime( utc, false );

    // correct the uptime
    if(utcNow > utcBefore) 
    {
        g_CLR_RT_ExecutionEngine.m_startTime += (utcNow - utcBefore);
    }
    else
    {
        g_CLR_RT_ExecutionEngine.m_startTime -= (utcBefore - utcNow);
    }

    TINYCLR_NOCLEANUP();
}
HRESULT Library_spot_Time_native_Microsoft_SPOT_Time_TimeService::SetUtcTime___STATIC__VOID__I8( CLR_RT_StackFrame& stack )
{
    TINYCLR_HEADER(); 

    Time_SetUtcTime( stack.Arg0().NumericByRef().s8, false );

    TINYCLR_NOCLEANUP_NOLABEL();
}
HRESULT Library_spot_Time_native_Microsoft_SPOT_Time_TimeService::SetUtcTime___STATIC__VOID__I8( CLR_RT_StackFrame& stack )
{
    TINYCLR_HEADER(); 

    INT64 utc = stack.Arg0().NumericByRef().s8;
    
    INT64 utcBefore = Time_GetUtcTime();
    INT64 utcNow = Time_SetUtcTime( utc, false );

    // correct the uptime
    if(utcNow > utcBefore) 
    {
        g_CLR_RT_ExecutionEngine.m_startTime += (utcNow - utcBefore);
    }
    else
    {
        g_CLR_RT_ExecutionEngine.m_startTime -= (utcBefore - utcNow);
    }

    TINYCLR_NOCLEANUP_NOLABEL();
}