user51226: Instead of using the regular Arduino board I have purchased the atmega328p-pu along with this components:

22pf ceramic capacitor
10K resistor
16mhz crystal
47uF capacitor
3.3 Volts Power supply 

The diagram looks like this:

Because the atmega328p chip that I purchased already comes loaded with arduino bootloader I can program this chip right away! This video explains in more detail how to upload the code to the chip. It is very simple.
The reason why I run my atmega328p chip with a 3.3V power supply is because of these reasons:

I have multiple sensors like the NRF24L01 that cannot take 5 volts.
I run this project of a 3.3 battery as well in order to save power.
I do not want to use voltage regulators as they are inefficient and they will waste my battery.
Everything works great. 

Even though everything works great if I am running atmega328P at 16mhz @ 3.3V I am not following the specifications. In order to do things correct I will like to run my code at 8mhz so that I am in within the specs
Question
What is the correct way of running this project at 8mhz? If I change the 16mhz crystal for a 8mhz it runs at 8mhz but everything is half the speed. I have to divide all time related functions by 2. Moreover, I cannot upload new code if it has a 8mhz crystal. In order to upload new code I have to place the 16mhz crystal upload the code and then change the crystal again.
Can I still use my 16mhz crystal and run at 8mhz so that I do not have to keep replacing the crystal? I want my millis function and other time dependent functions to have the correct time. I do not want to have to divide everything by 2. 
Do I have to burn a different bootloader for this to work? Where can I find a tutorial that can explain me all this?
There are tutorials on how to use the internal 8mhz crystal from the atmega328 chip but still want to use an external crystal as it is much more accurate
Edit
I just found  this link that explains how to do it. Edgar Bonet answer seems a lot simpler so I will stick to that. 

user7508: If you run your MCU at 8 MHz, everything will run at this frequency: not
only the CPU core but also the timers, including Timer 0 which is used
for millis(), delay(), etc. So you will have to use a modified
version of the Arduino timing functions in order to cope with this clock
frequency.
Fortunately, such version already exists. Actually, it is even supported
by the standard Arduino core, since it supports the 3.3 V version
of the Arduino Pro Mini, which uses an ATmega328P clocked at 8 MHz.
I thus suggest you install an 8 MHz crystal, burn in the bootloader
for the 3.3 V Pro Mini, and tell your IDE that you are using that
board. In the Tools menu:

set board to "Arduino Pro or Pro Mini"
set processor to ""ATmega328P (3.3V, 8 MHz)"


51226: <p>Instead of using the regular Arduino board I have purchased the <a href="https://rads.stackoverflow.com/amzn/click/com/B004G51AMW" rel="nofollow noreferrer" rel="nofollow noreferrer">atmega328p-pu</a> along with this components:</p>

<ol>
<li>22pf ceramic capacitor</li>
<li>10K resistor</li>
<li>16mhz crystal</li>
<li>47uF capacitor</li>
<li>3.3 Volts Power supply </li>
</ol>

<p>The diagram looks like this:</p>

<p><a href="https://i.stack.imgur.com/uXj0N.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/uXj0N.png" alt="enter image description here"></a></p>

<p>Because the atmega328p chip that I purchased already comes loaded with arduino bootloader I can program this chip right away! <a href="https://youtu.be/Sww1mek5rHU" rel="nofollow noreferrer">This video</a> explains in more detail how to upload the code to the chip. It is very simple.</p>

<p><strong>The reason why I run my atmega328p chip with a 3.3V power supply is because of these reasons:</strong></p>

<ol>
<li>I have multiple sensors like the NRF24L01 that cannot take 5 volts.</li>
<li>I run this project of a 3.3 battery as well in order to save power.</li>
<li>I do not want to use voltage regulators as they are inefficient and they will waste my battery.</li>
<li>Everything works great. </li>
</ol>

<p>Even though everything works great if I am running atmega328P at 16mhz @ 3.3V I am not following the specifications. <strong>In order to do things correct I will like to run my code at 8mhz so that I am in within the specs</strong></p>

<h2>Question</h2>

<p>What is the correct way of running this project at 8mhz? If I change the 16mhz crystal for a 8mhz it runs at 8mhz but everything is half the speed. I have to divide all time related functions by 2. Moreover, I cannot upload new code if it has a 8mhz crystal. In order to upload new code I have to place the 16mhz crystal upload the code and then change the crystal again.</p>

<p>Can I still use my 16mhz crystal and run at 8mhz so that I do not have to keep replacing the crystal? I want my <code>millis</code> function and other time dependent functions to have the correct time. I do not want to have to divide everything by 2. </p>

<p>Do I have to burn a different bootloader for this to work? Where can I find a tutorial that can explain me all this?</p>

<p><strong>There are tutorials on how to use the internal 8mhz crystal from the atmega328 chip but still want to use an external crystal as it is much more accurate</strong></p>

<h2>Edit</h2>

<p>I just found  <a href="https://tttapa.github.io/Pages/Arduino/Bootloaders/ATmega328P-custom-frequency.html" rel="nofollow noreferrer">this link</a> that explains how to do it. Edgar Bonet answer seems a lot simpler so I will stick to that. </p>
 7508: <p>If you run your MCU at 8 MHz, everything will run at this frequency: not
only the CPU core but also the timers, including Timer 0 which is used
for <code>millis()</code>, <code>delay()</code>, etc. So you will have to use a modified
version of the Arduino timing functions in order to cope with this clock
frequency.</p>

<p>Fortunately, such version already exists. Actually, it is even supported
by the standard Arduino core, since it supports the 3.3&nbsp;V version
of the Arduino Pro Mini, which uses an ATmega328P clocked at 8&nbsp;MHz.</p>

<p>I thus suggest you install an 8&nbsp;MHz crystal, burn in the bootloader
for the 3.3&nbsp;V Pro Mini, and tell your IDE that you are using that
board. In the Tools menu:</p>

<ul>
<li>set board to "Arduino Pro or Pro Mini"</li>
<li>set processor to ""ATmega328P (3.3V, 8 MHz)"</li>
</ul>
