<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>.Net &#8211; Espamática</title>
	<atom:link href="https://espamatica.com/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>https://espamatica.com</link>
	<description>Programación en 8 bits y algo más.</description>
	<lastBuildDate>Sat, 23 Aug 2025 16:19:36 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://i0.wp.com/espamatica.com/wp-content/uploads/2023/11/LogoWeb.png?fit=32%2C29&#038;ssl=1</url>
	<title>.Net &#8211; Espamática</title>
	<link>https://espamatica.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">147753459</site>	<item>
		<title>MediaTime</title>
		<link>https://espamatica.com/mediatime/</link>
					<comments>https://espamatica.com/mediatime/#respond</comments>
		
		<dc:creator><![CDATA[Juan Antonio Rubio García]]></dc:creator>
		<pubDate>Mon, 20 Mar 2023 07:57:14 +0000</pubDate>
				<category><![CDATA[.Net]]></category>
		<guid isPermaLink="false">https://espamatica.com/?p=264</guid>

					<description><![CDATA[MediaTime es una utilidad desarrollada en C#, VB.Net y C++ para control de tiempos multimedia.]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size wp-block-paragraph">MediaTime es una utilidad para control de tiempos multimedia, tanto de vídeo como de audio.</p>



<p class="has-medium-font-size wp-block-paragraph">En vídeo, si hablamos de televisión, el tiempo se representa como h:mm:ss.ff:</p>



<ul class="wp-block-list">
<li class="has-medium-font-size">h: horas</li>



<li class="has-medium-font-size">mm: minutos</li>



<li class="has-medium-font-size">ss: segundos</li>



<li class="has-medium-font-size">ff: frames</li>
</ul>



<p class="has-medium-font-size wp-block-paragraph"><span style="font-size: inherit;">Es muy importante entender que el número de frames por segundo no altera la duración de un vídeo. Como ejemplo se puede decir que un vídeo de dos segundos de duración, si tiene veinticinco frames por segundo tiene cincuenta frames, si tiene treinta frames por segundo tiene sesenta frames, pero en ambos casos tiene una duración de dos segundos, la duración no cambia.</span></p>



<p class="has-medium-font-size wp-block-paragraph">También es muy importante entender que un vídeo codificado a veinticinco frames por segundo, con una duración de un segundo y sesenta milésimas, tiene veintiséis frames que se reproducen durante cuarenta milésimas y un último frame que se reproduce durante veinte milésimas. El vídeo no tiene veintiséis frames y medio, sino veintisiete frames. El último frame se reproduce durante tan solo veinte milésimas, la mitad de tiempo que los otros veintiséis frames.</p>



<p class="has-medium-font-size wp-block-paragraph">En el caso de esta utilidad, «<em>ff</em>» representa fracciones por segundo, y su valor se cambia a través de la propiedad FractionsPerSeconds. Al trabajar con vídeo en televisión, las fracciones por segundo más comunes son veinticinco o treinta, mientras que si se trabaja con audio la fracción más común es cien, o lo que es lo mismo centésimas.</p>



<h3 id="implementando-mediatime" class="wp-block-heading has-large-font-size">Implementando MediaTime</h3>



<p class="has-medium-font-size wp-block-paragraph">La implementación que voy explicar es la de C#, aunque al final del artículo podéis descargar el código fuente en C#, Visual Basic .Net y C++ (es la primera vez que hago algo en C++). El espacio de nombres que voy a usar es Espamatica.Multimedia.Core, aunque sois libres de cambiarlo.</p>



<p class="has-medium-font-size wp-block-paragraph">Lo primero que implemento es un enumerado para indicar como se van a redondear las fracciones para representarlas como texto: esto es muy importante a la hora de representar una parrilla de televisión.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>namespace Espamatica.Multimedia.Core
{
    /// &lt;summary>
    /// Enumera los modos en lo que se pueden redondear las fracciones a la hora de su representación en texto.
    /// &lt;/summary>
    public enum FractionRoundMode
    {
        /// &lt;summary>
        /// La fracción de trunca.
        /// &lt;/summary>
        Truncate,

        /// &lt;summary>
        /// Si la fracción tiene decimales, se trunca y se le suma 1.
        /// &lt;/summary>
        Real,

        /// &lt;summary>
        /// La fracción se redondea.
        /// &lt;/summary>
        Round
    } // FractionRoundMode
} // Espamatica.Multimedia.Core
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #0991B6">namespace</span><span style="color: #002339"> </span><span style="color: #0444AC">Espamatica</span><span style="color: #002339">.</span><span style="color: #0444AC">Multimedia</span><span style="color: #002339">.</span><span style="color: #0444AC">Core</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// Enumera los modos en lo que se pueden redondear las fracciones a la hora de su representación en texto.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #0991B6">enum</span><span style="color: #002339"> </span><span style="color: #0444AC">FractionRoundMode</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// La fracción de trunca.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        Truncate,</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Si la fracción tiene decimales, se trunca y se le suma 1.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        Real,</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// La fracción se redondea.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        Round</span></span>
<span class="line"><span style="color: #002339">    } </span><span style="color: #357B42; font-style: italic">// FractionRoundMode</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Espamatica.Multimedia.Core</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">He implementado tres tipos de redondeo de fracción. Si tenemos un vídeo a veinticinco frames por segundo, esto implica que cada frame se va a reproducir durante cuarenta milésimas. Según esto, si el vídeo tiene una duración de cincuenta milésimas, podríamos decir que el vídeo tiene un frame y cuarto (1.25), aunque en realidad tiene dos: uno se reproduce durante cuarenta milésimas y otro que se reproduce durante diez milésimas.</p>



<p class="has-medium-font-size wp-block-paragraph">Teniendo en cuenta estos datos, el comportamiento según el valor seleccionado del enumerado sería:</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>Valor (milisegundos)</th><th>FractionPerSeconds</th><th>Fracciones</th><th>FractionRoundMode</th><th>Resultado (fracciones)</th></tr></thead><tbody><tr><td>50</td><td>25</td><td>1.25</td><td>Truncate</td><td>1</td></tr><tr><td>50</td><td>25</td><td>1.25</td><td>Real</td><td>2</td></tr><tr><td>50</td><td>25</td><td>1.25</td><td>Round</td><td>1</td></tr><tr><td>60</td><td>25</td><td>1.50</td><td>Truncate</td><td>1</td></tr><tr><td>60</td><td>25</td><td>1.50</td><td>Real</td><td>2</td></tr><tr><td>60</td><td>25</td><td>1.50</td><td>Round</td><td>2</td></tr></tbody></table><figcaption class="wp-element-caption">Fracciones redondeadas según el valor asignado a FractionRoundMode</figcaption></figure>



<p class="has-medium-font-size wp-block-paragraph">La implementación de MediaTime la realizo como una estructura, al modo de <a href="https://docs.microsoft.com/es-es/dotnet/api/system.timespan?view=net-5.0" target="_blank" aria-label="TimeSpam (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">TimeSpam</a> o <a href="https://docs.microsoft.com/es-es/dotnet/api/system.datetime?view=net-5.0" target="_blank" aria-label="DateTime (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">DateTime</a>. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>namespace Espamatica.Multimedia.Core
{
    using System;

    /// &lt;summary>
    /// Estructura para manejo de tiempos multimedia.
    /// &lt;/summary>
    public struct MediaTime
    {
    } // MediaTime
} // Espamatica.Multimedia.Core
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #0991B6">namespace</span><span style="color: #002339"> </span><span style="color: #0444AC">Espamatica</span><span style="color: #002339">.</span><span style="color: #0444AC">Multimedia</span><span style="color: #002339">.</span><span style="color: #0444AC">Core</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// Estructura para manejo de tiempos multimedia.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #0991B6">struct</span><span style="color: #002339"> </span><span style="color: #0444AC">MediaTime</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">    } </span><span style="color: #357B42; font-style: italic">// MediaTime</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Espamatica.Multimedia.Core</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Lo primero que implemento son las constantes que voy a usar para definir el número de unidades inferiores que hay en una unidad superior (las defino como long para evitar posteriores transformaciones).</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Número de ticks por milisegundo.
/// &lt;/summary>
public const long TicksMillisecond = 10000;

/// &lt;summary>
/// Número de milisegundos por segundo.
/// &lt;/summary>
public const long MillisecondsSecond = 1000;

/// &lt;summary>
/// Número de segundos por minuto.
/// &lt;/summary>
public const long SecondsMinute = 60;

/// &lt;summary>
/// Número de minutos por hora.
/// &lt;/summary>
public const long MinutesHour = 60;

/// &lt;summary>
/// Número de horas por día.
/// &lt;/summary>
public const long HoursDay = 24;

/// &lt;summary>
/// Número de ticks por segundo.
/// &lt;/summary>
public const long TicksSecond = TicksMillisecond * MillisecondsSecond;

/// &lt;summary>
/// Número de ticks por minuto.
/// &lt;/summary>
public const long TicksMinute = TicksSecond * SecondsMinute;

/// &lt;summary>
/// Número de ticks por hora.
/// &lt;/summary>
public const long TicksHour = TicksMinute * MinutesHour;
        
/// &lt;summary>
/// Número de ticks por día.
/// &lt;/summary>
public const long TicksDay = TicksHour * HoursDay;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de ticks por milisegundo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> TicksMillisecond </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">10000</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de milisegundos por segundo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> MillisecondsSecond </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">1000</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de segundos por minuto.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> SecondsMinute </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">60</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de minutos por hora.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> MinutesHour </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">60</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de horas por día.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> HoursDay </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">24</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de ticks por segundo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> TicksSecond </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">MillisecondsSecond</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de ticks por minuto.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> TicksMinute </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">SecondsMinute</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de ticks por hora.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> TicksHour </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">MinutesHour</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">        </span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Número de ticks por día.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">const</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> TicksDay </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">HoursDay</span><span style="color: #002339">;</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Una vez implementadas estas constantes, implemento los campos privados que uso para las propiedades.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Campo de control para la propiedad Days.
/// &lt;/summary>
private int days;

/// &lt;summary>
/// Campo de control para la propiedad DigitPerFraction.
/// &lt;/summary>
private int digitPerFraction;

/// &lt;summary>
/// Campo de control para la propiedad Fractions.
/// &lt;/summary>
private double fractions;

/// &lt;summary>
/// Campo de control para la propiedad FractionsPerSecond.
/// &lt;/summary>
private int fractionsPerSecond;

/// &lt;summary>
/// Campo de control para la propiedad Hours.
/// &lt;/summary>
private int hours;

/// &lt;summary>
/// Campo de control para la propiedad Milliseconds.
/// &lt;/summary>
private int milliseconds;

/// &lt;summary>
/// Campo de control para la propiedad MillisecondsPerFraction.
/// &lt;/summary>
private double millisecondsPerFraction;

/// &lt;summary>
/// Campo de control para la propiedad Minutes.
/// &lt;/summary>
private int minutes;

/// &lt;summary>
/// Campo de control para la propiedad RoundMode.
/// &lt;/summary>
private FractionRoundMode roundMode;

/// &lt;summary>
/// Campo de control para la propiedad Seconds.
/// &lt;/summary>
private int seconds;

/// &lt;summary>
/// Campo de control para la propiedad Ticks.
/// &lt;/summary>
private int ticks;

/// &lt;summary>
/// Campo de control para la propiedad Time.
/// &lt;/summary>
private long time;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Days.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> days;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad DigitPerFraction.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> digitPerFraction;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Fractions.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> fractions;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad FractionsPerSecond.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> fractionsPerSecond;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Hours.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> hours;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Milliseconds.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> milliseconds;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad MillisecondsPerFraction.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> millisecondsPerFraction;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Minutes.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> minutes;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad RoundMode.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #0444AC">FractionRoundMode</span><span style="color: #002339"> roundMode;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Seconds.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> seconds;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Ticks.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> ticks;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campo de control para la propiedad Time.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> time;</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Lo siguiente es implementar la propiedad donde indicaremos el número de fracciones por segundo con el que trabajaremos.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Obtiene el número de milisegundos por fracción.
/// &lt;/summary>
public double MillisecondsPerFraction
{
    get
    {
        return this.millisecondsPerFraction;
    }

    private set
    {
        if (value != this.millisecondsPerFraction)
        {
            this.millisecondsPerFraction = value;
        }
    }
} // MillisecondsPerFraction
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número de milisegundos por fracción.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #2F86D2">MillisecondsPerFraction</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">millisecondsPerFraction</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">private</span><span style="color: #002339"> </span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">millisecondsPerFraction</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">        {</span></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">millisecondsPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">        }</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// MillisecondsPerFraction</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Existen varias propiedades que al cambiar de valor refrescan el tiempo (time) y el tiempo multimedia (days, minutes, seconds, fractions, milliseconds y ticks). Lo siguiente que implemento son dos métodos que se encargan de realizar estas operaciones.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Actualiza los valores del tiempo mutimedia.
/// &lt;/summary>
private void RefreshMediaTime()
{
    long remainder = this.Time;

    this.days = (int)((remainder - (remainder % TicksDay)) / TicksDay);
    remainder -= this.days * TicksDay;

    this.hours = (int)((remainder - (remainder % TicksHour)) / TicksHour);
    remainder -= this.hours * TicksHour;

    this.minutes = (int)((remainder - (remainder % TicksMinute)) / TicksMinute);
    remainder -= this.minutes * TicksMinute;

    this.seconds = (int)((remainder - (remainder % TicksSecond)) / TicksSecond);
    remainder -= this.seconds * TicksSecond;

    this.fractions = ((double)remainder / (double)TicksMillisecond) / this.MillisecondsPerFraction;

    this.milliseconds = (int)((remainder - (remainder % TicksMillisecond)) /TicksMillisecond);
    remainder -= this.milliseconds * TicksMillisecond;

    this.ticks = (int)remainder;
} // RefreshMediaTime

/// &lt;summary>
/// Actualiza el tiempo.
/// &lt;/summary>
private void RefreshTime()
{
	this.time = (this.Days * TicksDay) + (this.Hours * TicksHour) + (this.Minutes * TicksMinute)
		+ (this.Seconds *TicksSecond) + (this.Milliseconds * TicksMillisecond) + this.Ticks;
} // RefreshTime
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Actualiza los valores del tiempo mutimedia.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #7B30D0">long</span><span style="color: #002339"> remainder </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">days</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)((</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339"> (</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">%</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksDay</span><span style="color: #002339">)) </span><span style="color: #7B30D0">/</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksDay</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">days</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksDay</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">hours</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)((</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339"> (</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">%</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339">)) </span><span style="color: #7B30D0">/</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">hours</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">minutes</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)((</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339"> (</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">%</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339">)) </span><span style="color: #7B30D0">/</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">minutes</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">seconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)((</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339"> (</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">%</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339">)) </span><span style="color: #7B30D0">/</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">seconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> ((</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">) </span><span style="color: #7B30D0">/</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsPerFraction</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)((</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339"> (</span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">%</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">)) </span><span style="color: #7B30D0">/</span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">remainder</span><span style="color: #002339"> </span><span style="color: #7B30D0">-=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ticks</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">remainder</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// RefreshMediaTime</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Actualiza el tiempo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">time</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Days</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksDay</span><span style="color: #002339">) </span><span style="color: #7B30D0">+</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Hours</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339">) </span><span style="color: #7B30D0">+</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Minutes</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">+</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Seconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339">) </span><span style="color: #7B30D0">+</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">) </span><span style="color: #7B30D0">+</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Ticks</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// RefreshTime</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">En RefreshMediaTime lo primero que hago es cargar los ticks totales que representan el tiempo (Time) en la variable remainder. Lo siguiente es calcular el número de días enteros que representan esos ticks, y se los resto a remainder para quedarme con los ticks que quedan. Calculo las horas, minutos, segundos y milisegundos de la misma manera. Antes de calcular los milisegundos, calculo las fracciones que representan estos milisegundos (recordad que las fracciones pueden cambiar pero los milisegundos no). Por último, una vez realizados todos los cálculos, ya solo quedan los ticks sobrantes. </p>



<p class="has-medium-font-size wp-block-paragraph">De esta manera he calculado que un número determinado de ticks representan N días, N horas, N minutos, N segundos, N milisegundos y N ticks, como si de un TimeSpan se tratara, pero además he calculado que los N milisegundos representan N fracciones, que pueden cambiar en base a las fracciones por segundo que se hayan especificado.</p>



<p class="has-medium-font-size wp-block-paragraph">En RefreshTime hago la operación inversa, tomo todos los componentes del tiempo y calculo los ticks totales (observad que no tengo en cuenta las fracciones).</p>



<p class="has-medium-font-size wp-block-paragraph">El siguiente paso es implementar las propiedades que representan los distintos componentes de tiempo en nuestra estructura.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(3 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Obtiene o establece los días.
/// &lt;/summary>
public int Days
{
	get
	{
		return this.days;
	}

	set
	{
		if (value != this.days)
		{
			this.days = value;

			this.RefreshTime();

			this.RefreshMediaTime();
		}
	}
} // Days

/// &lt;summary>
/// Obtiene o establece las fracciones.
/// &lt;/summary>
public double Fractions
{
	get
	{
		return this.fractions;
	}

	set
	{
		if (value != this.fractions)
		{
			this.Milliseconds = (int)Math.Truncate(value * this.MillisecondsPerFraction);
		}
	}
} // Fractions

/// &lt;summary>
/// Obtiene o establece las horas.
/// &lt;/summary>
public int Hours
{
	get
	{
		return this.hours;
	}

	set
	{
		if (value != this.hours)
		{
			this.hours = value;

			this.RefreshTime();

			this.RefreshMediaTime();
		}
	}
} // Hours

/// &lt;summary>
/// Obtiene o establece los milisegundos.
/// &lt;/summary>
public int Milliseconds
{
	get
	{
		return this.milliseconds;
	}

	set
	{
		if (value != this.milliseconds)
		{
			this.milliseconds = value;

			this.RefreshTime();

			this.RefreshMediaTime();
		}
	}
} // Milliseconds

/// &lt;summary>
/// Obtiene o establece los minutos.
/// &lt;/summary>
public int Minutes
{
	get
	{
		return this.minutes;
	}

	set
	{
		if (value != this.minutes)
		{
			this.minutes = value;

			this.RefreshTime();

			this.RefreshMediaTime();
		}
	}
} // Minutes

/// &lt;summary>
/// Obtiene o establece los segundos.
/// &lt;/summary>
public int Seconds
{
	get
	{
		return this.seconds;
	}

	set
	{
		if (value != this.seconds)
		{
			this.seconds = value;

			this.RefreshTime();

			this.RefreshMediaTime();
		}
	}
} // Seconds

/// &lt;summary>
/// Obtiene o establece los ticks.
/// &lt;/summary>
public int Ticks
{
	get
	{
		return this.ticks;
	}

	set
	{
		if (value != this.ticks)
		{
			this.ticks = value;

			this.RefreshTime();

			this.RefreshMediaTime();
		}
	}
} // Ticks

/// &lt;summary>
/// Obtiene o establece el tiempo en ticks.
/// &lt;/summary>
public long Time
{
	get
	{
		return this.time;
	}

	set
	{
		if (value != this.time)
		{
			this.time = value;

			this.RefreshMediaTime();
		}
	}
} // Time
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece los días.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">Days</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">days</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">days</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">days</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Days</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece las fracciones.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #2F86D2">Fractions</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">Math</span><span style="color: #002339">.</span><span style="color: #7EB233">Truncate</span><span style="color: #002339">(</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsPerFraction</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Fractions</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece las horas.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">Hours</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">hours</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">hours</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">hours</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Hours</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece los milisegundos.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">Milliseconds</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Milliseconds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece los minutos.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">Minutes</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">minutes</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">minutes</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">minutes</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Minutes</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece los segundos.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">Seconds</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">seconds</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">seconds</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">seconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Seconds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece los ticks.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">Ticks</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ticks</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ticks</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ticks</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshTime</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Ticks</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece el tiempo en ticks.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">long</span><span style="color: #002339"> </span><span style="color: #2F86D2">Time</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">time</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">time</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">time</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Time</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Podéis observar como la mayoría de estas propiedades llaman a RefreshMediaTime y RefreshTime cuando cambian su valor.</p>



<p class="has-medium-font-size wp-block-paragraph">El siguiente paso es implementar la propiedades que faltan: dígitos necesarios para representar las fracciones, el número de fracciones por segundo y el modo de redondeo a la hora de representar las fracciones.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Obtiene el número de dígitos usados para representar las fracciones.
/// &lt;/summary>
public int DigitPerFraction
{
	get
	{
		return this.digitPerFraction;
	}

	private set
	{
		this.digitPerFraction = value;
	}
} // DigitPerFraction

/// &lt;summary>
/// Obtiene o establece el número de fracciones por segundo.
/// &lt;/summary>
public int FractionsPerSeconds
{
	get
	{
		return this.fractionsPerSecond;
	}

	set
	{
		if (value != this.fractionsPerSecond)
		{
			if (value &lt; 1 || value > (int)MillisecondsSecond)
			{
				value = 1000;
			}

			this.fractionsPerSecond = value;

			this.RefreshFractionPerSeconds();

			this.RefreshMediaTime();
		}
	}
} // FractionsPerSeconds

/// &lt;summary>
/// Obtiene o establece el modo en el que se redondean las fracciones a la hora de representarlas en texto.
/// &lt;/summary>
public FractionRoundMode RoundMode
{
	get
	{
		return this.roundMode;
	}

	set
	{
		this.roundMode = value;
	}
} // RoundMode
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número de dígitos usados para representar las fracciones.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">DigitPerFraction</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">digitPerFraction</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">private</span><span style="color: #002339"> </span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">digitPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// DigitPerFraction</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece el número de fracciones por segundo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">FractionsPerSeconds</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;</span><span style="color: #002339"> </span><span style="color: #174781">1</span><span style="color: #002339"> </span><span style="color: #7B30D0">||</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">MillisecondsSecond</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">			{</span></span>
<span class="line"><span style="color: #002339">				</span><span style="color: #2F86D2">value</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">1000</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">			}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshFractionPerSeconds</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// FractionsPerSeconds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene o establece el modo en el que se redondean las fracciones a la hora de representarlas en texto.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #2F86D2">FractionRoundMode</span><span style="color: #002339"> </span><span style="color: #2F86D2">RoundMode</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">roundMode</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">roundMode</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// RoundMode</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Ahora mismo tenemos un error en el código ya que al asignar el valor a FractionsPerSeconds se llama a un método que todavía no está implementado, y ese es el siguiente paso.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Actualiza los datos relativos a las fracciones por segundo.
/// &lt;/summary>
private void RefreshFractionPerSeconds()
{
	if (this.FractionsPerSeconds > 0 &amp;&amp; this.FractionsPerSeconds &lt; (int)MillisecondsSecond)
	{
		this.MillisecondsPerFraction = Math.Round(1.0 / (double)this.FractionsPerSeconds * (double)MillisecondsSecond, 4);

		this.DigitPerFraction = this.FractionsPerSeconds.ToString().Length;

		if (Math.Pow(10.0, (double)this.DigitPerFraction - 1.0) == (double)this.FractionsPerSeconds)
		{
			this.DigitPerFraction--;
		}
	}
} // RefreshFractionPerSeconds
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Actualiza los datos relativos a las fracciones por segundo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">RefreshFractionPerSeconds</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339"> </span><span style="color: #7B30D0">&amp;&amp;</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">MillisecondsSecond</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">Math</span><span style="color: #002339">.</span><span style="color: #7EB233">Round</span><span style="color: #002339">(</span><span style="color: #174781">1.0</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">MillisecondsSecond</span><span style="color: #002339">, </span><span style="color: #174781">4</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DigitPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">().</span><span style="color: #2F86D2">Length</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">Math</span><span style="color: #002339">.</span><span style="color: #7EB233">Pow</span><span style="color: #002339">(</span><span style="color: #174781">10.0</span><span style="color: #002339">, (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DigitPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339"> </span><span style="color: #174781">1.0</span><span style="color: #002339">) </span><span style="color: #7B30D0">==</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">		{</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DigitPerFraction</span><span style="color: #7B30D0">--</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">		}</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// RefreshFractionPerSeconds</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">En RefreshFractionPerSeconds calculo el número de milisegundos que dura cada fracción, y el número de dígitos necesarios para representar las fracciones. El ajuste que hago en el número de dígitos necesarios para representar las fracciones (Math.Pow &#8230;) es debido a que las fracciones las represento empezando desde 0 (0 a 9, 0 a 99, 0 a 999, etcétera), por lo que si las fracciones por segundo son potencia de 10, hay que restar un dígito.</p>



<p class="has-medium-font-size wp-block-paragraph">Cuando estamos trabajando con tiempo, es muy habitual que queramos sumar y restar tiempo, así como saber si es mayor, menor, igual, etcétera, motivo por el cual implemento la sobrecarga de diversos operadores.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Compara dos objetos para determinar si el primer objeto especificado es menor que el segundo objeto especificado.
/// &lt;/summary>
/// &lt;param name="obj1">Primer objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Si el primer objeto especificado es menos que el segundo objeto especificado true, en caso contrario false.&lt;/returns>
public static bool operator &lt;(MediaTime obj1, MediaTime obj2)
{
	return obj1.Time &lt; obj2.Time;
} // &lt;

/// &lt;summary>
/// Compara dos objetos para determinar si el primer objeto especificado es menor o igual que el segundo objeto especificado.
/// &lt;/summary>
/// &lt;param name="obj1">Primer objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Si el primer objeto especificado es menor o igual que el segundo objeto especificado true, en caso contrario false.&lt;/returns>
public static bool operator &lt;=(MediaTime obj1, MediaTime obj2)
{
	return obj1.Time &lt;= obj2.Time;
} // &lt;=

/// &lt;summary>
/// Campara dos objetos para determinar si el primer objeto especificado no es igual al segundo objeto especificado.
/// &lt;/summary>
/// &lt;param name="obj1">Primer objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Si los dos objetos son distintos true, en caso contrario false.&lt;/returns>
public static bool operator !=(MediaTime obj1, MediaTime obj2)
{
	return !obj1.Equals(obj2);
} // !=

/// &lt;summary>
/// Resta dos objetos especificados.
/// &lt;/summary>
/// &lt;param name="obj1">Primero objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Objeto resultante de la resta.&lt;/returns>
public static MediaTime operator -(MediaTime obj1, MediaTime obj2)
{
	MediaTime mt = new MediaTime(obj1.Time, obj1.FractionsPerSeconds);

	mt.Time -= obj2.Time;

	return mt;
} // -

/// &lt;summary>
/// Suma dos objetos especificados.
/// &lt;/summary>
/// &lt;param name="obj1">Primero objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Objeto resultante de la suma.&lt;/returns>
public static MediaTime operator +(MediaTime obj1, MediaTime obj2)
{
	MediaTime mt = new MediaTime(obj1.Time, obj1.FractionsPerSeconds);

	mt.Time += obj2.Time;

	return mt;
} // +

/// &lt;summary>
/// Campara dos objetos para determinar si el primer objeto especificado es igual al segundo objeto especificado.
/// &lt;/summary>
/// &lt;param name="obj1">Primer objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Si los dos objetos son iguales true, en caso contrario false.&lt;/returns>
public static bool operator ==(MediaTime obj1, MediaTime obj2)
{
	return obj1.Equals(obj2);
} // ==

/// &lt;summary>
/// Compara dos objetos para determinar si el primer objeto especificado es mayor que el segundo objeto especificado.
/// &lt;/summary>
/// &lt;param name="obj1">Primer objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Si el primer objeto especificado es mayor que el segundo objeto especificado true, en caso contrario false.&lt;/returns>
public static bool operator >(MediaTime obj1, MediaTime obj2)
{
	return obj1.Time > obj2.Time;
} // >

/// &lt;summary>
/// Compara dos objetos para determinar si el primer objeto especificado es mayor o igual que el segundo objeto especificado.
/// &lt;/summary>
/// &lt;param name="obj1">Primer objeto especificado.&lt;/param>
/// &lt;param name="obj2">Segundo objeto especificado.&lt;/param>
/// &lt;returns>Si el primer objeto especificado es mayor o igual que el segundo objeto especificado true, en caso contrario false.&lt;/returns>
public static bool operator >=(MediaTime obj1, MediaTime obj2)
{
	return obj1.Time >= obj2.Time;
} // >=
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Compara dos objetos para determinar si el primer objeto especificado es menor que el segundo objeto especificado.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;obj1&quot;</span><span style="color: #357B42; font-style: italic">&gt;Primer objeto especificado.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;obj2&quot;</span><span style="color: #357B42; font-style: italic">&gt;Segundo objeto especificado.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;Si el primer objeto especificado es menos que el segundo objeto especificado true, en caso contrario false.&lt;/</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// &lt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Compara dos objetos para determinar si el primer objeto especificado es menor o igual que el segundo objeto especificado.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primer objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Si el primer objeto especificado es menor o igual que el segundo objeto especificado true, en caso contrario false.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;=</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;=</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// &lt;=</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campara dos objetos para determinar si el primer objeto especificado no es igual al segundo objeto especificado.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primer objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Si los dos objetos son distintos true, en caso contrario false.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">!=</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #7B30D0">!</span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #7EB233">Equals</span><span style="color: #002339">(</span><span style="color: #2F86D2">obj2</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// !=</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Resta dos objetos especificados.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primero objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Objeto resultante de la resta.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">-</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #0444AC">MediaTime</span><span style="color: #002339"> mt </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">MediaTime</span><span style="color: #002339">(</span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">, </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">mt</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">-=</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">mt</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// -</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Suma dos objetos especificados.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primero objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Objeto resultante de la suma.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">+</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #0444AC">MediaTime</span><span style="color: #002339"> mt </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">MediaTime</span><span style="color: #002339">(</span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">, </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #2F86D2">mt</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">mt</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// +</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Campara dos objetos para determinar si el primer objeto especificado es igual al segundo objeto especificado.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primer objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Si los dos objetos son iguales true, en caso contrario false.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> operator ==(MediaTime obj1, MediaTime obj2)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #7EB233">Equals</span><span style="color: #002339">(</span><span style="color: #2F86D2">obj2</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// ==</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Compara dos objetos para determinar si el primer objeto especificado es mayor que el segundo objeto especificado.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primer objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Si el primer objeto especificado es mayor que el segundo objeto especificado true, en caso contrario false.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// &gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Compara dos objetos para determinar si el primer objeto especificado es mayor o igual que el segundo objeto especificado.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj1&quot;&gt;Primer objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;obj2&quot;&gt;Segundo objeto especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Si el primer objeto especificado es mayor o igual que el segundo objeto especificado true, en caso contrario false.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #2F86D2">operator</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;=</span><span style="color: #002339">(</span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj1</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;=</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj2</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// &gt;=</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Llegados a este punto, me falta un constructor que reciba dos parámetros.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly> #region Constructors
 /// &lt;summary>
 /// Inicializa una nueva instancia de la estructura MediaTime.
 /// &lt;/summary>
 /// &lt;param name="time">Tiempo en ticks.&lt;/param>
 /// &lt;param name="fractionsPerSecond">Fracciones por segundo (entre 1 y 1000).&lt;/param>
 public MediaTime(long time, int fractionsPerSecond)
 {
   if (fractionsPerSecond &lt; 1 || fractionsPerSecond > MediaTime.MillisecondsSecond)
   {
     throw new ArgumentOutOfRangeException("fractionsPerSecond", fractionsPerSecond, string.Format("to {0} from {1}", 1, MediaTime.MillisecondsSecond));
   }

   this.days = 0;
   this.digitPerFraction = 0;
   this.fractions = 0;
   this.fractionsPerSecond = fractionsPerSecond;
   this.hours = 0;
   this.milliseconds = 0;
   this.millisecondsPerFraction = 0.0;
   this.minutes = 0;
   this.roundMode = FractionRoundMode.Truncate;
   this.seconds = 0;
   this.ticks = 0;
   this.time = time;

   this.RefreshFractionPerSeconds();

   this.RefreshMediaTime();
 } // MediaTime</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #002339"> #</span><span style="color: #7B30D0">region</span><span style="color: #002339"> </span><span style="color: #A44185">Constructors</span></span>
<span class="line"><span style="color: #357B42; font-style: italic"> /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic"> /// Inicializa una nueva instancia de la estructura MediaTime.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic"> /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic"> /// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;time&quot;</span><span style="color: #357B42; font-style: italic">&gt;Tiempo en ticks.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic"> /// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;fractionsPerSecond&quot;</span><span style="color: #357B42; font-style: italic">&gt;Fracciones por segundo (entre 1 y 1000).&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339"> </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7EB233">MediaTime</span><span style="color: #002339">(</span><span style="color: #7B30D0">long</span><span style="color: #002339"> </span><span style="color: #2F86D2">time</span><span style="color: #002339">, </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339"> {</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #7B30D0">if</span><span style="color: #002339"> (</span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">&lt;</span><span style="color: #002339"> </span><span style="color: #174781">1</span><span style="color: #002339"> </span><span style="color: #7B30D0">||</span><span style="color: #002339"> </span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;</span><span style="color: #002339"> </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsSecond</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">   {</span></span>
<span class="line"><span style="color: #002339">     </span><span style="color: #7B30D0">throw</span><span style="color: #002339"> </span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">ArgumentOutOfRangeException</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;fractionsPerSecond&quot;</span><span style="color: #002339">, </span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339">, </span><span style="color: #7B30D0">string</span><span style="color: #002339">.</span><span style="color: #7EB233">Format</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;to {0} from {1}&quot;</span><span style="color: #002339">, </span><span style="color: #174781">1</span><span style="color: #002339">, </span><span style="color: #2F86D2">MediaTime</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsSecond</span><span style="color: #002339">));</span></span>
<span class="line"><span style="color: #002339">   }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">days</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">digitPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">fractionsPerSecond</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">hours</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">millisecondsPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0.0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">minutes</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">roundMode</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">FractionRoundMode</span><span style="color: #002339">.</span><span style="color: #2F86D2">Truncate</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">seconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ticks</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">time</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">time</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshFractionPerSeconds</span><span style="color: #002339">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">   </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">RefreshMediaTime</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339"> } </span><span style="color: #357B42; font-style: italic">// MediaTime</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Lo último que implemento es una serie de métodos que permiten sumar o restar unidades de tiempo, determinar si dos objetos son iguales, obtener la cantidad total de tiempo representada por uno de sus componentes u obtener la representación en texto del tiempo.</p>



<p class="has-medium-font-size wp-block-paragraph">Empiezo por los métodos que permiten sumar o restar unidades de tiempo.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Añade el número de días especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="days">Número de días especificado.&lt;/param>
public void AddDays(int days)
{
	this.Time += (long)days * TicksDay;
} // AddDays

/// &lt;summary>
/// Añade el número de horas especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="hours">Número de horas especificado.&lt;/param>
public void AddHours(int hours)
{
	this.Time += (long)hours * TicksHour;
} // AddHours

/// &lt;summary>
/// Añade el número de fracciones especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="fractions">Número de fracciones especificado.&lt;/param>
public void AddFractions(int fractions)
{
	this.Time += (long)((double)fractions * this.MillisecondsPerFraction * (double)TicksMillisecond);
} // AddFractions

/// &lt;summary>
/// Añade el número de milisegundos especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="milliseconds">Número de milisegundos especificado.&lt;/param>
public void AddMilliseconds(int milliseconds)
{
	this.Time += (long)milliseconds * TicksMillisecond;
} // AddMilliseconds

/// &lt;summary>
/// Añade el número de minutos especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="minutes">Número de minutos especificado.&lt;/param>
public void AddMinutes(int minutes)
{
	this.Time += (long)minutes * TicksMinute;
} // AddMinutes

/// &lt;summary>
/// Añade el número de segundos especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="seconds">Número de segundos especificado.&lt;/param>
public void AddSeconds(int seconds)
{
	this.Time += (long)seconds * TicksSecond;
} // AddSeconds

/// &lt;summary>
/// Añade el número de ticks especificado al tiempo actual.
/// &lt;/summary>
/// &lt;param name="ticks">Número de ticks especificado.&lt;/param>
public void AddTicks(int ticks)
{
	this.Time += (long)ticks;
} // AddTicks
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de días especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;days&quot;</span><span style="color: #357B42; font-style: italic">&gt;Número de días especificado.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddDays</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> days)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)</span><span style="color: #2F86D2">days</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksDay</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddDays</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de horas especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;hours&quot;&gt;Número de horas especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddHours</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> hours)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)</span><span style="color: #2F86D2">hours</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddHours</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de fracciones especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;fractions&quot;&gt;Número de fracciones especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddFractions</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> fractions)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)((</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">fractions</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsPerFraction</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">);</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddFractions</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de milisegundos especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;milliseconds&quot;&gt;Número de milisegundos especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddMilliseconds</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> milliseconds)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)</span><span style="color: #2F86D2">milliseconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddMilliseconds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de minutos especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;minutes&quot;&gt;Número de minutos especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddMinutes</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> minutes)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)</span><span style="color: #2F86D2">minutes</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddMinutes</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de segundos especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;seconds&quot;&gt;Número de segundos especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddSeconds</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> seconds)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)</span><span style="color: #2F86D2">seconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">*</span><span style="color: #002339"> </span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddSeconds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Añade el número de ticks especificado al tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;param name=&quot;ticks&quot;&gt;Número de ticks especificado.&lt;/param&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">AddTicks</span><span style="color: #002339">(</span><span style="color: #7B30D0">int</span><span style="color: #002339"> ticks)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">long</span><span style="color: #002339">)</span><span style="color: #2F86D2">ticks</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// AddTicks</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Aunque todos los métodos son Add, para restar solo hay que pasarle valores negativos. Por otro lado, al contrario de lo que pasa con los operadores que permiten sumar o restar objetos MediaTime y devuelven el resultado en un nuevo objeto, los métodos Add alteran el valor Time de la instancia con la que se está trabajando.</p>



<p class="has-medium-font-size wp-block-paragraph">El siguiente par de métodos que implemento evalúa si dos instancias de MediaTime son consideradas iguales, el primero, y obtiene el código hash de la instancia, el segundo.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Compara el objeto especificado con la instacia actual para determinar si se consideran iguales.
/// &lt;/summary>
/// &lt;param name="obj">Objeto especificado.&lt;/param>
/// &lt;returns>Si los dos objetos son considerados iguales true, en caso contrario false.&lt;/returns>
public override bool Equals(object obj)
{
	return obj is MediaTime &amp;&amp; ((MediaTime)obj).Time == this.Time;
} // Equals

/// &lt;summary>
/// Obtiene el código hash de la instancia actual.
/// &lt;/summary>
/// &lt;returns>Código hash de la instancia actual.&lt;/returns>
public override int GetHashCode()
{
	return this.Time.GetHashCode();
} // GetHashCode
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Compara el objeto especificado con la instacia actual para determinar si se consideran iguales.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;obj&quot;</span><span style="color: #357B42; font-style: italic">&gt;Objeto especificado.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;Si los dos objetos son considerados iguales true, en caso contrario false.&lt;/</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">override</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #7EB233">Equals</span><span style="color: #002339">(</span><span style="color: #7B30D0">object</span><span style="color: #002339"> obj)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">obj</span><span style="color: #002339"> </span><span style="color: #7B30D0">is</span><span style="color: #002339"> </span><span style="color: #0444AC">MediaTime</span><span style="color: #002339"> </span><span style="color: #7B30D0">&amp;&amp;</span><span style="color: #002339"> ((</span><span style="color: #0444AC">MediaTime</span><span style="color: #002339">)</span><span style="color: #2F86D2">obj</span><span style="color: #002339">).</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">==</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Equals</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el código hash de la instancia actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Código hash de la instancia actual.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">override</span><span style="color: #002339"> </span><span style="color: #7B30D0">int</span><span style="color: #002339"> </span><span style="color: #7EB233">GetHashCode</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339">.</span><span style="color: #7EB233">GetHashCode</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetHashCode</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Y vamos llegando al final. Implemento una serie de métodos Get que obtienen las unidades totales de los distintos componentes de tiempo que representa el valor de MediaTime.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Obtiene el número total de días.
/// &lt;/summary>
/// &lt;returns>Número total de días.&lt;/returns>
public double GetTotalDays()
{
	return (double)this.Time / (double)TicksDay;
} // GetTotalDays

/// &lt;summary>
/// Obtiene el número total de fracciones.
/// &lt;/summary>
/// &lt;returns>Número total de fracciones.&lt;/returns>
public double GetTotalFractions()
{
	return (double)this.Time / (double)TicksMillisecond / this.MillisecondsPerFraction;
} // GetTotalFractions

/// &lt;summary>
/// Obtiene el número total de horas.
/// &lt;/summary>
/// &lt;returns>Número total de horas.&lt;/returns>
public double GetTotalHours()
{
	return (double)this.Time / (double)TicksHour;
} // GetTotalHours

/// &lt;summary>
/// Obtiene el número total de milisegundos.
/// &lt;/summary>
/// &lt;returns>Número total de milisegundos.&lt;/returns>
public double GetTotalMilliseconds()
{
	return (double)this.Time / (double)TicksMillisecond;
} // GetTotalMilliseconds

/// &lt;summary>
/// Obtiene el número total de minutos.
/// &lt;/summary>
/// &lt;returns>Número total de minutos.&lt;/returns>
public double GetTotalMinutes()
{
	return (double)this.Time / (double)TicksMinute;
} // GetTotalMinutes

/// &lt;summary>
/// Obtiene el número total de segundos.
/// &lt;/summary>
/// &lt;returns>Número total de segundos.&lt;/returns>
public double GetTotalSeconds()
{
	return (double)this.Time / (double)TicksSecond;
} // GetTotalSeconds
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número total de días.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;Número total de días.&lt;/</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #7EB233">GetTotalDays</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksDay</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetTotalDays</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número total de fracciones.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Número total de fracciones.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #7EB233">GetTotalFractions</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">MillisecondsPerFraction</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetTotalFractions</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número total de horas.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Número total de horas.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #7EB233">GetTotalHours</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksHour</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetTotalHours</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número total de milisegundos.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Número total de milisegundos.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #7EB233">GetTotalMilliseconds</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksMillisecond</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetTotalMilliseconds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número total de minutos.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Número total de minutos.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #7EB233">GetTotalMinutes</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksMinute</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetTotalMinutes</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene el número total de segundos.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;returns&gt;Número total de segundos.&lt;/returns&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7B30D0">double</span><span style="color: #002339"> </span><span style="color: #7EB233">GetTotalSeconds</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Time</span><span style="color: #002339"> </span><span style="color: #7B30D0">/</span><span style="color: #002339"> (</span><span style="color: #7B30D0">double</span><span style="color: #002339">)</span><span style="color: #2F86D2">TicksSecond</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// GetTotalSeconds</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Y por último, pero no menos importante, implemento el método con el que obtengo la representación en cadena de texto del valor de MediaTime.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/// &lt;summary>
/// Obtiene la representación en cadena del tiempo actual.
/// &lt;/summary>
/// &lt;returns>Representación en cadena del tiempo actual.&lt;/returns>
public override string ToString()
{
	int fractionsRounded = 0;

	switch (this.RoundMode)
	{
		case FractionRoundMode.Real:
			fractionsRounded = this.fractions % 1 > 0.0 
				? (int)Math.Truncate(this.fractions) + 1 
				: (int)this.fractions;

			break;

		case FractionRoundMode.Round:
			fractionsRounded = (int)Math.Round(this.fractions, 0, MidpointRounding.AwayFromZero);

			break;

		default:
			fractionsRounded = (int)Math.Truncate(this.fractions);

			break;
	}

	string fractions = fractionsRounded.ToString().PadLeft(this.DigitPerFraction, '0');

	return string.Format("{0:d2}:{1:d2}:{2:d2}:{3:d2}.{4}", 
		new object[] 
		{ 
			this.Days, 
			this.Hours, 
			this.Minutes, 
			this.Seconds, 
			fractions });
} // ToString</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// Obtiene la representación en cadena del tiempo actual.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">/// &lt;</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;Representación en cadena del tiempo actual.&lt;/</span><span style="color: #0444AC">returns</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">override</span><span style="color: #002339"> </span><span style="color: #7B30D0">string</span><span style="color: #002339"> </span><span style="color: #7EB233">ToString</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">int</span><span style="color: #002339"> fractionsRounded </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">0</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">switch</span><span style="color: #002339"> (</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">RoundMode</span><span style="color: #002339">)</span></span>
<span class="line"><span style="color: #002339">	{</span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">case</span><span style="color: #002339"> </span><span style="color: #0444AC">FractionRoundMode</span><span style="color: #002339">.</span><span style="color: #0444AC">Real</span><span style="color: #002339">:</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #2F86D2">fractionsRounded</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339"> </span><span style="color: #7B30D0">%</span><span style="color: #002339"> </span><span style="color: #174781">1</span><span style="color: #002339"> </span><span style="color: #7B30D0">&gt;</span><span style="color: #002339"> </span><span style="color: #174781">0.0</span><span style="color: #002339"> </span></span>
<span class="line"><span style="color: #002339">				</span><span style="color: #7B30D0">?</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">Math</span><span style="color: #002339">.</span><span style="color: #7EB233">Truncate</span><span style="color: #002339">(</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339">) </span><span style="color: #7B30D0">+</span><span style="color: #002339"> </span><span style="color: #174781">1</span><span style="color: #002339"> </span></span>
<span class="line"><span style="color: #002339">				</span><span style="color: #7B30D0">:</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #7B30D0">break</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">case</span><span style="color: #002339"> </span><span style="color: #0444AC">FractionRoundMode</span><span style="color: #002339">.</span><span style="color: #0444AC">Round</span><span style="color: #002339">:</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #2F86D2">fractionsRounded</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">Math</span><span style="color: #002339">.</span><span style="color: #7EB233">Round</span><span style="color: #002339">(</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339">, </span><span style="color: #174781">0</span><span style="color: #002339">, </span><span style="color: #2F86D2">MidpointRounding</span><span style="color: #002339">.</span><span style="color: #2F86D2">AwayFromZero</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #7B30D0">break</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">default</span><span style="color: #002339">:</span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #2F86D2">fractionsRounded</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> (</span><span style="color: #7B30D0">int</span><span style="color: #002339">)</span><span style="color: #2F86D2">Math</span><span style="color: #002339">.</span><span style="color: #7EB233">Truncate</span><span style="color: #002339">(</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">fractions</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #7B30D0">break</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">string</span><span style="color: #002339"> fractions </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">fractionsRounded</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">().</span><span style="color: #7EB233">PadLeft</span><span style="color: #002339">(</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DigitPerFraction</span><span style="color: #002339">, </span><span style="color: #A44185">&#39;0&#39;</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">	</span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #7B30D0">string</span><span style="color: #002339">.</span><span style="color: #7EB233">Format</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;{0:d2}:{1:d2}:{2:d2}:{3:d2}.{4}&quot;</span><span style="color: #002339">, </span></span>
<span class="line"><span style="color: #002339">		</span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #7B30D0">object</span><span style="color: #002339">[] </span></span>
<span class="line"><span style="color: #002339">		{ </span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Days</span><span style="color: #002339">, </span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Hours</span><span style="color: #002339">, </span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Minutes</span><span style="color: #002339">, </span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Seconds</span><span style="color: #002339">, </span></span>
<span class="line"><span style="color: #002339">			</span><span style="color: #2F86D2">fractions</span><span style="color: #002339"> });</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// ToString</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Ya solo queda ver si todo funciona, lo cual voy a comprobar con una aplicación de consola.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>namespace Espamatica.Multimedia.Core
{
    using System;

    /// &lt;summary>
    /// Programa de ejemplo.
    /// &lt;/summary>
    public class Sample
    {
        /// &lt;summary>
        /// Punto de inicio del programa.
        /// &lt;/summary>
        public static void Main()
        {
            MediaTime time = new MediaTime((new TimeSpan(0, 27, 34, 45, 60)).Ticks, 25);

            Console.WriteLine(time.ToString());

            time.AddFractions(1);

            Console.WriteLine(time.ToString());

            time.FractionsPerSeconds = 30;

            Console.WriteLine(time.ToString());

            time.AddFractions(1);

            Console.WriteLine(time.ToString());

            time.RoundMode = FractionRoundMode.Round;

            Console.WriteLine(time.ToString());

            time.RoundMode = FractionRoundMode.Real;

            Console.WriteLine(time.ToString());

            Console.Read();
        }
    }
} // Espamatica.Multimedia.Core
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #0991B6">namespace</span><span style="color: #002339"> </span><span style="color: #0444AC">Espamatica</span><span style="color: #002339">.</span><span style="color: #0444AC">Multimedia</span><span style="color: #002339">.</span><span style="color: #0444AC">Core</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// Programa de ejemplo.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #0991B6">class</span><span style="color: #002339"> </span><span style="color: #0444AC">Sample</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Punto de inicio del programa.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">static</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">Main</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">        {</span></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #0444AC">MediaTime</span><span style="color: #002339"> time </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">MediaTime</span><span style="color: #002339">((</span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">TimeSpan</span><span style="color: #002339">(</span><span style="color: #174781">0</span><span style="color: #002339">, </span><span style="color: #174781">27</span><span style="color: #002339">, </span><span style="color: #174781">34</span><span style="color: #002339">, </span><span style="color: #174781">45</span><span style="color: #002339">, </span><span style="color: #174781">60</span><span style="color: #002339">)).</span><span style="color: #2F86D2">Ticks</span><span style="color: #002339">, </span><span style="color: #174781">25</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">WriteLine</span><span style="color: #002339">(</span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">AddFractions</span><span style="color: #002339">(</span><span style="color: #174781">1</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">WriteLine</span><span style="color: #002339">(</span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #2F86D2">FractionsPerSeconds</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #174781">30</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">WriteLine</span><span style="color: #002339">(</span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">AddFractions</span><span style="color: #002339">(</span><span style="color: #174781">1</span><span style="color: #002339">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">WriteLine</span><span style="color: #002339">(</span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #2F86D2">RoundMode</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">FractionRoundMode</span><span style="color: #002339">.</span><span style="color: #2F86D2">Round</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">WriteLine</span><span style="color: #002339">(</span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #2F86D2">RoundMode</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">FractionRoundMode</span><span style="color: #002339">.</span><span style="color: #2F86D2">Real</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">WriteLine</span><span style="color: #002339">(</span><span style="color: #2F86D2">time</span><span style="color: #002339">.</span><span style="color: #7EB233">ToString</span><span style="color: #002339">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #2F86D2">Console</span><span style="color: #002339">.</span><span style="color: #7EB233">Read</span><span style="color: #002339">();</span></span>
<span class="line"><span style="color: #002339">        }</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Espamatica.Multimedia.Core</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">El resultado de la ejecución es el siguiente.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6adb908bd6b7e&quot;}" data-wp-interactive="core/image" data-wp-key="6adb908bd6b7e" class="wp-block-image aligncenter size-large is-resized wp-lightbox-container"><img data-recalc-dims="1" decoding="async" width="125" height="100" data-attachment-id="1778" data-permalink="https://espamatica.com/mediatime/image-1/" data-orig-file="https://i0.wp.com/espamatica.com/wp-content/uploads/2020/12/image-1.png?fit=125%2C100&amp;ssl=1" data-orig-size="125,100" data-comments-opened="1" data-image-title="image-1" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/espamatica.com/wp-content/uploads/2020/12/image-1.png?fit=125%2C100&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/espamatica.com/wp-content/uploads/2020/12/image-1.png?resize=125%2C100&#038;ssl=1" alt="MediaTime" class="wp-image-1778"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Prueba de MediaTime.</figcaption></figure>



<p class="has-medium-font-size wp-block-paragraph"><a href="https://espamatica.com/wp-content/uploads/2021/01/MediaTime.zip" class="rank-math-link">Aquí</a> puedes descargar el código fuente en C#, Visual Basic .Net y C++.</p>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-medium-font-size wp-block-paragraph">También puedes visitar el resto de tutoriales:</p>



<ul class="wp-block-list">
<li class="has-medium-font-size">.Net
<ul class="wp-block-list">
<li class="has-medium-font-size"><a href="https://espamatica.com/mediatime/">MediaTime</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/nullabledatetimepicker/">NullableDateTimePicker</a></li>
</ul>
</li>



<li class="has-medium-font-size">Z80
<ul class="wp-block-list">
<li class="has-medium-font-size"><a href="https://espamatica.com/entorno-de-desarrollo-para-ensamblador-z80/">Entorno de desarrollo</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/numeros-bcd-spectrum/">Números BCD</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/posiciones-de-pantalla-zx-spectrum/">Pantalla ZX Spectrum</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/ensamblador-zx-spectrum-pong-introduccion/">Pong</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/0x00-ensamblador-zx-spectrum-marciano-introduccion/">Batalla Espacial</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/0x01-ensamblador-zx-spectrum-oxo-tablero-de-juego/">Tres en raya</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/uso-de-beepfx/">Uso de BeepFX</a></li>
</ul>
</li>
</ul>
</div>



<p class="has-medium-font-size wp-block-paragraph">Y recuerda, si lo usas no te limites a copiarlo, intenta entenderlo y adaptarlo a tus necesidades.</p>
</div>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6adb908bd9268&quot;}" data-wp-interactive="core/image" data-wp-key="6adb908bd9268" class="wp-block-image aligncenter size-large wp-lightbox-container"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="639" height="217" data-attachment-id="1843" data-permalink="https://espamatica.com/mediatime-3/" data-orig-file="https://i0.wp.com/espamatica.com/wp-content/uploads/2021/01/MediaTime.jpg?fit=639%2C217&amp;ssl=1" data-orig-size="639,217" data-comments-opened="1" data-image-title="MediaTime" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/espamatica.com/wp-content/uploads/2021/01/MediaTime.jpg?fit=639%2C217&amp;ssl=1" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://i0.wp.com/espamatica.com/wp-content/uploads/2021/01/MediaTime.jpg?resize=639%2C217&#038;ssl=1" alt="MediaTime" class="wp-image-1843" srcset="https://i0.wp.com/espamatica.com/wp-content/uploads/2021/01/MediaTime.jpg?w=639&amp;ssl=1 639w, https://i0.wp.com/espamatica.com/wp-content/uploads/2021/01/MediaTime.jpg?resize=300%2C102&amp;ssl=1 300w" sizes="(max-width: 639px) 100vw, 639px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://espamatica.com/mediatime/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">264</post-id>	</item>
		<item>
		<title>NullableDateTimePicker</title>
		<link>https://espamatica.com/nullabledatetimepicker/</link>
					<comments>https://espamatica.com/nullabledatetimepicker/#respond</comments>
		
		<dc:creator><![CDATA[Juan Antonio Rubio García]]></dc:creator>
		<pubDate>Mon, 20 Mar 2023 07:26:35 +0000</pubDate>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Nullable DateTimePicker]]></category>
		<category><![CDATA[Windows Forms]]></category>
		<guid isPermaLink="false">https://espamatica.com/?p=1708</guid>

					<description><![CDATA[NullableDateTimePicker es una extensión del control DateTimePicker, que permite valores nulos.]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size wp-block-paragraph">Una de las solicitudes habituales de los usuarios, cuando desarrollamos una aplicación Windows Forms en <a href="https://espamatica.com/category/net/">.Net</a>, es que si no se selecciona ninguna fecha en un control <a href="https://learn.microsoft.com/es-es/dotnet/api/system.windows.forms.datetimepicker?view=windowsdesktop-7.0" target="_blank" rel="noreferrer noopener nofollow">DateTimePicker</a>, no aparezca ninguna fecha reflejada. </p>



<p class="has-medium-font-size wp-block-paragraph">El control DateTimePicker se puede configurar para que muestre un CheckBox, y si este no está seleccionado la fecha se difumina dando apariencia de no estar habilitada, pero los usuarios prefieren que no aparezca fecha alguna: este es el aspecto que he implementado en NullableDateTimePicker.</p>



<p class="has-medium-font-size wp-block-paragraph">NullableDateTimePicker es una clase que hereda de DateTimePicker, en la que he implementado dos propiedades, ocultado otras dos e implementado un controlador de evento.</p>



<p class="has-medium-font-size wp-block-paragraph">Lo primero es importar los espacios de nombres necesarios, que en este caso son tres.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" data-code="using System;
using System.ComponentModel;   
using System.Windows.Forms;" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">.</span><span style="color: #0444AC">ComponentModel</span><span style="color: #002339">;   </span></span>
<span class="line"><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">.</span><span style="color: #0444AC">Windows</span><span style="color: #002339">.</span><span style="color: #0444AC">Forms</span><span style="color: #002339">;</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">En realidad System.ComponentModel no es necesario, pero a mi personalmente me gusta dejarlo todo lo máximo documentado posible. Con System.ComponentModel añado descripciones a las propiedades para que aparezcan en tiempo de diseño y las incluyo en la categoría que creo conveniente (esto lo podéis adaptar a vuestro gusto). También limito que quiero que se muestre en tiempo de diseño.</p>



<p class="has-medium-font-size wp-block-paragraph">Lo siguiente es implementar dos propiedades para indicar el formato en el que se debe mostrar la fecha cuando se muestra el CheckBox y esta chequedao, <strong>DefaultFormat</strong>, y el formato cuando se muestra el CheckBox y no está chequeado, <strong>NullFormat</strong>.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" data-code="public DateTimePickerFormat DefaultFormat { get; set; }

public DateTimePickerFormat NullFormat { get; set; }" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #2F86D2">DateTimePickerFormat</span><span style="color: #002339"> </span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> { </span><span style="color: #2F86D2">get</span><span style="color: #002339">; </span><span style="color: #2F86D2">set</span><span style="color: #002339">; }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #2F86D2">DateTimePickerFormat</span><span style="color: #002339"> </span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339"> { </span><span style="color: #2F86D2">get</span><span style="color: #002339">; </span><span style="color: #2F86D2">set</span><span style="color: #002339">; }</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Hay dos propiedades de DateTimePicker que vamos a usar, pero las vamos a ocultar con nuestra implementación para que funcionen de manera distinta a como lo hacen, <strong>Checked</strong> y <strong>Format</strong>.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" data-code="public new bool Checked
{
    get
    {
        return base.Checked;
    }

    set
    {
        base.Checked = value;

        this.OnValueChanged(new EventArgs());
    }
}

public new DateTimePickerFormat Format
{
    get
    {
        return base.Format;
    }

    internal set
    {
        base.Format = value;
    }
}" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">new</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> </span><span style="color: #2F86D2">Checked</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">OnValueChanged</span><span style="color: #002339">(</span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">EventArgs</span><span style="color: #002339">());</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"><span style="color: #002339">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">new</span><span style="color: #002339"> </span><span style="color: #2F86D2">DateTimePickerFormat</span><span style="color: #002339"> </span><span style="color: #2F86D2">Format</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">get</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #2F86D2">internal</span><span style="color: #002339"> </span><span style="color: #2F86D2">set</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    }</span></span>
<span class="line"><span style="color: #002339">}</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">En el caso de Checked, la única diferencia es que desencadena el evento ValueChanged, y dado que Checked no es virtual, he tenido que ocultarla.</p>



<p class="has-medium-font-size wp-block-paragraph">En el caso de Format, quiero que el valor no se pueda asignar directamente, por eso he cambiado el modificador de <strong>set</strong> y lo he puesto como <strong>internal</strong>.  Como se verá en el código final, he usado System.ComponentModel para que la propiedad Format no sea accesible en tiempo de diseño.</p>



<p class="has-medium-font-size wp-block-paragraph">He implementado un constructor para asignar valores por defecto a las propiedades cuando se agrega el control desde el cuadro de herramientas a, por ejemplo, un formulario.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" data-code="public NullableDateTimePicker()
{
    this.DefaultFormat = this.NullFormat = DateTimePickerFormat.Long;

    this.Format = this.Checked ? this.DefaultFormat : this.NullFormat;

    this.ValueChanged += this.NullableDateTimePicker_ValueChanged;
}" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7EB233">NullableDateTimePicker</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">DateTimePickerFormat</span><span style="color: #002339">.</span><span style="color: #2F86D2">Long</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339"> </span><span style="color: #7B30D0">?</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">:</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ValueChanged</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullableDateTimePicker_ValueChanged</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">}</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Como podéis ver, también he añadido un controlador al evento ValueChanged de DateTimePicker.</p>



<p class="has-medium-font-size wp-block-paragraph">Por último, he implementado dicho controlador para cambiar el formato dependiendo de si CheckBox está o no chequeado.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" data-code="private void NullableDateTimePicker_ValueChanged(object sender, EventArgs e)
{
    this.Format = this.Checked ? this.DefaultFormat : this.NullFormat;
}" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">NullableDateTimePicker_ValueChanged</span><span style="color: #002339">(</span><span style="color: #7B30D0">object</span><span style="color: #002339"> sender, </span><span style="color: #0444AC">EventArgs</span><span style="color: #002339"> e)</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339"> </span><span style="color: #7B30D0">?</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">:</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">}</span></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph">Y con esto ya tenemos todo lo necesario para que, cuando mostremos el CheckBox y borremos la fecha, el control no muestre nada. Para que se comporte de esta manera tenéis que configurar el control de la siguiente manera.</p>



<pre class="wp-block-code has-pale-cyan-blue-background-color has-background has-medium-font-size"><code>ShowCheckBox = true
NullFormat = CustomFormat
CustomFormat = " "</code></pre>



<p class="has-medium-font-size wp-block-paragraph">Una última cosa a tener en cuenta es a la hora de enlazar el control con una propiedad, de por ejemplo una clase, de tal manera que cuando cambie la propiedad de la clase se actualice el valor del control y viceversa, es la forma en la que lo debemos implementar.</p>



<pre class="wp-block-code has-pale-cyan-blue-background-color has-background has-medium-font-size"><code>clase.Fecha = nullableDateTimePicker.Checked ? nullableDateTimePicker.Value.Date : null;</code></pre>



<pre class="wp-block-code has-pale-cyan-blue-background-color has-background has-medium-font-size"><code>if (clase.Fecha.HasValue)
{
    nullableDateTimePicker.Value = clase.Fecha.Value;
    nullableDateTimePicker.Checked = true;
}
else
{
    nullableDateTimePicker.Checked = false;
}</code></pre>



<h2 id="nullabledatetimepicker-el-resultado-final" class="wp-block-heading has-large-font-size">NullableDateTimePicker, el resultado final</h2>



<p class="has-medium-font-size wp-block-paragraph">Y éste es el resultado final de la clase. Cambiadlo y adaptadlo a vuestro gusto, si algo os parece que no está bien mejoradlo, pero sobre todo no os limitéis a copiarlo, intentad entenderlo. Seguro que hay otras formas de implementarlo.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#002339;--cbp-line-number-width:calc(3 * 0.6 * 1rem);line-height:clamp(16px, 1rem, 24px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#f2f2f2;color:#003353">C#</span><span role="button" tabindex="0" data-code="namespace Espamatica.Windows.Forms
{
    #region Includes
    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    #endregion
    
    /// &lt;summary&gt;
    /// &lt;para&gt;NullableDateTimePicker que permite mostrar la fecha en blanco cuando se muestra el CheckBox y Checked es false.&lt;/para&gt;
    /// &lt;para&gt;Valores a proporcionar:&lt;/para&gt;
    /// &lt;para&gt;DefaultFormat: formato de la fecha cuando Checked = true.&lt;/para&gt;
    /// &lt;para&gt;NullFormat: formato de la fecha cuando Checked = true (Custom para que no muestre nada).&lt;/para&gt;
    /// &lt;para&gt;CustomFormat: espacio en blanco para que no muestre nada.&lt;/para&gt;
    /// &lt;/summary&gt;
    public class NullableDateTimePicker : DateTimePicker
    {
        #region Constructores
        /// &lt;summary&gt;
        /// Incializa una nueva instancia de la clase NullableDateTimePicker.
        /// &lt;/summary&gt;
        public NullableDateTimePicker()
        {
            this.DefaultFormat = this.NullFormat = DateTimePickerFormat.Long;

            this.Format = this.Checked ? this.DefaultFormat : this.NullFormat;

            this.ValueChanged += this.NullableDateTimePicker_ValueChanged;
        } // NullableDateTimePicker
        #endregion

        #region Propiedades públicas
        /// &lt;summary&gt;
        /// Obtiene o establece un valor que indica si la propiedad System.Windows.Forms.DateTimePicker.Value
        /// se ha establecido con un valor de fecha y hora válido, y si el valor mostrado
        /// se puede actualizar.
        /// &lt;/summary&gt;
        [Category(&quot;Comportamiento&quot;)]
        [Description(&quot;Cuando ShowSelectBox está establecida en true, determina si la casilla está activada, indicando que el usuario ha seleccionado un valor.&quot;)]
        public new bool Checked
        {
            get
            {
                return base.Checked;
            }

            set
            {
                base.Checked = value;

                this.OnValueChanged(new EventArgs());
            }
        } // Checked

        /// &lt;summary&gt;
        /// Obtiene o establece el formato por defecto en el que se muestra el valor cuando Checked = true.
        /// &lt;/summary&gt;
        [Category(&quot;Apariencia&quot;)]
        [Description(&quot;Obtiene o establece el formato por defecto en el que se muestra el valor cuando checked = true.&quot;)]
        public DateTimePickerFormat DefaultFormat { get; set; }

        /// &lt;summary&gt;
        /// Obtiene o establece el formato.
        /// &lt;/summary&gt;
        [Browsable(false)]
        [Category(&quot;Apariencia&quot;)]
        [Description(&quot;Obtiene o establece el formato.&quot;)]
        public new DateTimePickerFormat Format
        {
            get
            {
                return base.Format;
            }

            internal set
            {
                base.Format = value;
            }
        } // Format

        /// &lt;summary&gt;
        /// Obtiene o establece el formato por defecto en el que se muestra el valor cuando Checked = false.
        /// &lt;/summary&gt;
        [Category(&quot;Apariencia&quot;)]
        [Description(&quot;Obtiene o establece el formato por defecto en el que se muestra el valor cuando Checked = false.&quot;)]
        public DateTimePickerFormat NullFormat { get; set; }
        #endregion

        #region Métodos privados
        /// &lt;summary&gt;
        /// Controlador del evento ValueChanged de NullableDateTimePicker.
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;sender&quot;&gt;Objeto que desencadena el evento.&lt;/param&gt;
        /// &lt;param name=&quot;e&quot;&gt;Datos del evento.&lt;/param&gt;
        private void NullableDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            this.Format = this.Checked ? this.DefaultFormat : this.NullFormat;
        } // NullableDateTimePicker_ValueChanged
        #endregion
    } // NullableDateTimePicker
} // Espamatica.Windows.Forms" style="color:#002339;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-ochin" style="background-color: #FFF" tabindex="0"><code><span class="line"><span style="color: #0991B6">namespace</span><span style="color: #002339"> </span><span style="color: #0444AC">Espamatica</span><span style="color: #002339">.</span><span style="color: #0444AC">Windows</span><span style="color: #002339">.</span><span style="color: #0444AC">Forms</span></span>
<span class="line"><span style="color: #002339">{</span></span>
<span class="line"><span style="color: #002339">    #</span><span style="color: #7B30D0">region</span><span style="color: #002339"> </span><span style="color: #A44185">Includes</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">.</span><span style="color: #0444AC">ComponentModel</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #7B30D0">using</span><span style="color: #002339"> </span><span style="color: #0444AC">System</span><span style="color: #002339">.</span><span style="color: #0444AC">Windows</span><span style="color: #002339">.</span><span style="color: #0444AC">Forms</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">    #</span><span style="color: #7B30D0">endregion</span></span>
<span class="line"><span style="color: #002339">    </span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;NullableDateTimePicker que permite mostrar la fecha en blanco cuando se muestra el CheckBox y Checked es false.&lt;/</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;Valores a proporcionar:&lt;/</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;DefaultFormat: formato de la fecha cuando Checked = true.&lt;/</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;NullFormat: formato de la fecha cuando Checked = true (Custom para que no muestre nada).&lt;/</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;CustomFormat: espacio en blanco para que no muestre nada.&lt;/</span><span style="color: #0444AC">para</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">    /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">    </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #0991B6">class</span><span style="color: #002339"> </span><span style="color: #0444AC">NullableDateTimePicker</span><span style="color: #002339"> : </span><span style="color: #0444AC">DateTimePicker</span></span>
<span class="line"><span style="color: #002339">    {</span></span>
<span class="line"><span style="color: #002339">        #</span><span style="color: #7B30D0">region</span><span style="color: #002339"> </span><span style="color: #A44185">Constructores</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Incializa una nueva instancia de la clase NullableDateTimePicker.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #7EB233">NullableDateTimePicker</span><span style="color: #002339">()</span></span>
<span class="line"><span style="color: #002339">        {</span></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">DateTimePickerFormat</span><span style="color: #002339">.</span><span style="color: #2F86D2">Long</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339"> </span><span style="color: #7B30D0">?</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">:</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">ValueChanged</span><span style="color: #002339"> </span><span style="color: #7B30D0">+=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullableDateTimePicker_ValueChanged</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">        } </span><span style="color: #357B42; font-style: italic">// NullableDateTimePicker</span></span>
<span class="line"><span style="color: #002339">        #</span><span style="color: #7B30D0">endregion</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">        #</span><span style="color: #7B30D0">region</span><span style="color: #002339"> </span><span style="color: #A44185">Propiedades públicas</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Obtiene o establece un valor que indica si la propiedad System.Windows.Forms.DateTimePicker.Value</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// se ha establecido con un valor de fecha y hora válido, y si el valor mostrado</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// se puede actualizar.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Category</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Comportamiento&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Description</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Cuando ShowSelectBox está establecida en true, determina si la casilla está activada, indicando que el usuario ha seleccionado un valor.&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">new</span><span style="color: #002339"> </span><span style="color: #7B30D0">bool</span><span style="color: #002339"> Checked</span></span>
<span class="line"><span style="color: #002339">        {</span></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #0991B6">get</span></span>
<span class="line"><span style="color: #002339">            {</span></span>
<span class="line"><span style="color: #002339">                </span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #0991B6">set</span></span>
<span class="line"><span style="color: #002339">            {</span></span>
<span class="line"><span style="color: #002339">                </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">                </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #7EB233">OnValueChanged</span><span style="color: #002339">(</span><span style="color: #7B30D0">new</span><span style="color: #002339"> </span><span style="color: #0444AC">EventArgs</span><span style="color: #002339">());</span></span>
<span class="line"><span style="color: #002339">            }</span></span>
<span class="line"><span style="color: #002339">        } </span><span style="color: #357B42; font-style: italic">// Checked</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Obtiene o establece el formato por defecto en el que se muestra el valor cuando Checked = true.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Category</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Apariencia&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Description</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Obtiene o establece el formato por defecto en el que se muestra el valor cuando checked = true.&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #0444AC">DateTimePickerFormat</span><span style="color: #002339"> DefaultFormat { </span><span style="color: #0991B6">get</span><span style="color: #002339">; </span><span style="color: #0991B6">set</span><span style="color: #002339">; }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Obtiene o establece el formato.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Browsable</span><span style="color: #002339">(</span><span style="color: #174781">false</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Category</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Apariencia&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Description</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Obtiene o establece el formato.&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #DA5221">new</span><span style="color: #002339"> </span><span style="color: #0444AC">DateTimePickerFormat</span><span style="color: #002339"> Format</span></span>
<span class="line"><span style="color: #002339">        {</span></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #0991B6">get</span></span>
<span class="line"><span style="color: #002339">            {</span></span>
<span class="line"><span style="color: #002339">                </span><span style="color: #7B30D0">return</span><span style="color: #002339"> </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #DA5221">internal</span><span style="color: #002339"> </span><span style="color: #0991B6">set</span></span>
<span class="line"><span style="color: #002339">            {</span></span>
<span class="line"><span style="color: #002339">                </span><span style="color: #2F86D2">base</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #2F86D2">value</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">            }</span></span>
<span class="line"><span style="color: #002339">        } </span><span style="color: #357B42; font-style: italic">// Format</span></span>
<span class="line"></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;summary&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Obtiene o establece el formato por defecto en el que se muestra el valor cuando Checked = false.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/summary&gt;</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Category</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Apariencia&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        [</span><span style="color: #0444AC">Description</span><span style="color: #002339">(</span><span style="color: #A44185">&quot;Obtiene o establece el formato por defecto en el que se muestra el valor cuando Checked = false.&quot;</span><span style="color: #002339">)]</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">public</span><span style="color: #002339"> </span><span style="color: #0444AC">DateTimePickerFormat</span><span style="color: #002339"> NullFormat { </span><span style="color: #0991B6">get</span><span style="color: #002339">; </span><span style="color: #0991B6">set</span><span style="color: #002339">; }</span></span>
<span class="line"><span style="color: #002339">        #</span><span style="color: #7B30D0">endregion</span></span>
<span class="line"></span>
<span class="line"><span style="color: #002339">        #</span><span style="color: #7B30D0">region</span><span style="color: #002339"> </span><span style="color: #A44185">Métodos privados</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// Controlador del evento ValueChanged de NullableDateTimePicker.</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;/</span><span style="color: #0444AC">summary</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;sender&quot;</span><span style="color: #357B42; font-style: italic">&gt;Objeto que desencadena el evento.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #357B42; font-style: italic">        /// &lt;</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic"> </span><span style="color: #DF8618; font-style: italic">name</span><span style="color: #357B42; font-style: italic">=</span><span style="color: #A44185; font-style: italic">&quot;e&quot;</span><span style="color: #357B42; font-style: italic">&gt;Datos del evento.&lt;/</span><span style="color: #0444AC">param</span><span style="color: #357B42; font-style: italic">&gt;</span></span>
<span class="line"><span style="color: #002339">        </span><span style="color: #DA5221">private</span><span style="color: #002339"> </span><span style="color: #7B30D0">void</span><span style="color: #002339"> </span><span style="color: #7EB233">NullableDateTimePicker_ValueChanged</span><span style="color: #002339">(</span><span style="color: #7B30D0">object</span><span style="color: #002339"> sender, </span><span style="color: #0444AC">EventArgs</span><span style="color: #002339"> e)</span></span>
<span class="line"><span style="color: #002339">        {</span></span>
<span class="line"><span style="color: #002339">            </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Format</span><span style="color: #002339"> </span><span style="color: #7B30D0">=</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">Checked</span><span style="color: #002339"> </span><span style="color: #7B30D0">?</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">DefaultFormat</span><span style="color: #002339"> </span><span style="color: #7B30D0">:</span><span style="color: #002339"> </span><span style="color: #000000">this</span><span style="color: #002339">.</span><span style="color: #2F86D2">NullFormat</span><span style="color: #002339">;</span></span>
<span class="line"><span style="color: #002339">        } </span><span style="color: #357B42; font-style: italic">// NullableDateTimePicker_ValueChanged</span></span>
<span class="line"><span style="color: #002339">        #</span><span style="color: #7B30D0">endregion</span></span>
<span class="line"><span style="color: #002339">    } </span><span style="color: #357B42; font-style: italic">// NullableDateTimePicker</span></span>
<span class="line"><span style="color: #002339">} </span><span style="color: #357B42; font-style: italic">// Espamatica.Windows.Forms</span></span></code></pre></div>



<figure class="wp-block-image aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="277" height="71" data-attachment-id="1726" data-permalink="https://espamatica.com/nullabledatetimepicker/image/" data-orig-file="https://i0.wp.com/espamatica.com/wp-content/uploads/2020/12/image.png?fit=277%2C71&amp;ssl=1" data-orig-size="277,71" data-comments-opened="1" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/espamatica.com/wp-content/uploads/2020/12/image.png?fit=277%2C71&amp;ssl=1" src="https://i0.wp.com/espamatica.com/wp-content/uploads/2020/12/image.png?resize=277%2C71&#038;ssl=1" alt="NullableDateTimePicker" class="wp-image-1726"/></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-medium-font-size wp-block-paragraph">También puedes visitar el resto de tutoriales:</p>



<ul class="wp-block-list">
<li class="has-medium-font-size">.Net
<ul class="wp-block-list">
<li class="has-medium-font-size"><a href="https://espamatica.com/mediatime/">MediaTime</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/nullabledatetimepicker/">NullableDateTimePicker</a></li>
</ul>
</li>



<li class="has-medium-font-size">Z80
<ul class="wp-block-list">
<li class="has-medium-font-size"><a href="https://espamatica.com/entorno-de-desarrollo-para-ensamblador-z80/">Entorno de desarrollo</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/numeros-bcd-spectrum/">Números BCD</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/posiciones-de-pantalla-zx-spectrum/">Pantalla ZX Spectrum</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/ensamblador-zx-spectrum-pong-introduccion/">Pong</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/0x00-ensamblador-zx-spectrum-marciano-introduccion/">Batalla Espacial</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/0x01-ensamblador-zx-spectrum-oxo-tablero-de-juego/">Tres en raya</a></li>



<li class="has-medium-font-size"><a href="https://espamatica.com/uso-de-beepfx/">Uso de BeepFX</a></li>
</ul>
</li>
</ul>
</div>



<p class="has-medium-font-size wp-block-paragraph">Y recuerda, si lo usas no te limites a copiarlo, intenta entenderlo y adaptarlo a tus necesidades.</p>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://espamatica.com/nullabledatetimepicker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1708</post-id>	</item>
	</channel>
</rss>
