mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 19:42:37 +02:00
84 lines
No EOL
7 KiB
HTML
84 lines
No EOL
7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<title>Convert string to duration - Alexis Métaireau</title>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet" href="https://blog.notmyidea.org/theme/css/main.css" type="text/css" />
|
|
<link href="https://blog.notmyidea.org/feeds/all.atom.xml" type="application/atom+xml" rel="alternate"
|
|
title="Alexis Métaireau ATOM Feed" />
|
|
</head>
|
|
|
|
<body>
|
|
<section id="links">
|
|
<ul>
|
|
<li><a class="main" href="/">Alexis Métaireau</a></li>
|
|
<li><a class=""
|
|
href="https://blog.notmyidea.org/journal/index.html">Journal</a></li>
|
|
<li><a class="selected"
|
|
href="https://blog.notmyidea.org/code/">Code, etc.</a></li>
|
|
<li><a class=""
|
|
href="https://blog.notmyidea.org/weeknotes/">Notes hebdo</a></li>
|
|
<li><a class=""
|
|
href="https://blog.notmyidea.org/lectures/">Lectures</a></li>
|
|
</ul>
|
|
</section>
|
|
|
|
<header>
|
|
<h1 class="post-title">Convert string to duration</h1>
|
|
<time datetime="2023-10-11T00:00:00+02:00">11 octobre 2023</time>
|
|
|
|
|
|
</header>
|
|
<article>
|
|
<p>I found myself wanting to convert a string to a duration (int), for some configuration.</p>
|
|
<p>Something you can call like this:</p>
|
|
<div class="highlight"><pre><span></span><code><span class="n">string_to_duration</span><span class="p">(</span><span class="s2">"1d"</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">"days"</span><span class="p">)</span> <span class="c1"># returns 1</span>
|
|
<span class="n">string_to_duration</span><span class="p">(</span><span class="s2">"1d"</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">"hours"</span><span class="p">)</span> <span class="c1"># returns 24</span>
|
|
<span class="n">string_to_duration</span><span class="p">(</span><span class="s2">"3m"</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">"hours"</span><span class="p">)</span> <span class="c1"># returns 3 * 24 * 30</span>
|
|
</code></pre></div>
|
|
|
|
<p>The code :</p>
|
|
<p><span class="dquo">“</span>`python
|
|
from typing import Literal</p>
|
|
<p>def string_to_duration(value: str, target: Literal[“days”, “hours”]):
|
|
“”“Convert a string to a number of hours, or days”“”
|
|
num = int(“”.join(filter(str.isdigit, value)))</p>
|
|
<div class="highlight"><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="nv">target</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"hours"</span>:
|
|
<span class="w"> </span><span class="nv">reconvert</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">True</span>
|
|
|
|
<span class="k">if</span><span class="w"> </span><span class="s2">"h"</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">value</span>:
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nv">target</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"days"</span>:
|
|
<span class="w"> </span><span class="nv">raise</span><span class="w"> </span><span class="nv">ValueError</span><span class="ss">(</span><span class="s2">"Invalid duration value"</span>,<span class="w"> </span><span class="nv">value</span><span class="ss">)</span>
|
|
<span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">num</span>
|
|
<span class="w"> </span><span class="nv">reconvert</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">False</span>
|
|
<span class="nv">elif</span><span class="w"> </span><span class="s2">"d"</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">value</span>:
|
|
<span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">num</span>
|
|
<span class="nv">elif</span><span class="w"> </span><span class="s2">"w"</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">value</span>:
|
|
<span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">7</span>
|
|
<span class="nv">elif</span><span class="w"> </span><span class="s2">"m"</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">value</span>:
|
|
<span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">30</span>
|
|
<span class="nv">elif</span><span class="w"> </span><span class="s2">"y"</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">value</span>:
|
|
<span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">365</span>
|
|
<span class="k">else</span>:
|
|
<span class="w"> </span><span class="nv">raise</span><span class="w"> </span><span class="nv">ValueError</span><span class="ss">(</span><span class="s2">"Invalid duration value"</span>,<span class="w"> </span><span class="nv">value</span><span class="ss">)</span>
|
|
|
|
<span class="k">if</span><span class="w"> </span><span class="nv">target</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"hours"</span><span class="w"> </span><span class="nv">and</span><span class="w"> </span><span class="nv">reconvert</span>:
|
|
<span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">num</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">24</span>
|
|
|
|
<span class="k">return</span><span class="w"> </span><span class="nv">num</span>
|
|
</code></pre></div>
|
|
|
|
<p><span class="dquo">“</span>““</p>
|
|
<p>
|
|
<a href="https://blog.notmyidea.org/tag/python.html">#python</a>, <a href="https://blog.notmyidea.org/tag/conversion.html">#conversion</a> - Posté dans la catégorie <a href="https://blog.notmyidea.org/code/">code</a>
|
|
</p>
|
|
</article>
|
|
<footer>
|
|
<a id="feed" href="/feeds/all.atom.xml"><img src="/theme/rss.svg" /></a>
|
|
</footer>
|
|
|
|
</body>
|
|
|
|
</html> |