Thanks Anthony, I didn't know that pytz is deprecated. Now with zoneinfo is 
working.

Regards, Andres.

El miércoles, 30 de marzo de 2022 a la(s) 03:02:56 UTC-4, Antonis 
Christofides escribió:

> Hi,
>
> not what you asked, but
>
>     from settings import TIME_ZONE
>
> is an error. It happens to work in this case, but generally you should 
> write
>
>     from django.conf import settings
>
> and then use "settings.TIME_ZONE". In Django, "settings" isn't a module, 
> it's an object. Django has some logic when populating that object with 
> attributes. An obvious example is that you can django the 
> DJANGO_SETTINGS_MODULES environment variable to specify a different 
> settings file.
>
> Now, regarding what you asked, the pytz documentation has the following 
> warning:
>
> Unfortunately using the tzinfo argument of the standard datetime 
> constructors ‘’does not work’’ with pytz for many timezones.
>
> I don't remember the correct way to do it, since I'm always confused by 
> how pytz works, and also its usage is deprecated because of the existence 
> of the new "zoneinfo" Python standard library module.
>
> Regards,
>
> Antonis
>
> Antonis Christofides+30-6979924665 <+30%20697%20992%204665> (mobile)
>
>
> On 29/03/2022 17.51, Andrés Alvarez wrote:
>
> I need to save some fields in my database in the format YYY-MM-MM 
> 00:00:00+00. So I decide to do this: 
>
> # setting.py
> TIME_ZONE = 'America/Mexico_City'
> USE_I18N = True
> USE_L10N = True
> USE_TZ = True
>
> # models.py
> class Program(models.Model):
>     objects = models.Manager()
>     objects_custom = ProgramManager()
>     class Meta:
>         ordering = ['id']
>     name = models.CharField(max_length=100, null=False)
>     program_budget = models.CharField(max_length=100, null=False)
>     company = models.ForeignKey(Company, on_delete=models.CASCADE, null
> =True)
>     active = models.BooleanField(default=True)
>     uuid4 = models.CharField(max_length=50, unique=True, null=True)
>     country_list = models.TextField(null=True)
>     method_payment = models.CharField(max_length=100, null=True)
>     currency = models.CharField(max_length=4, default='USD', null=True)
>     create_at = models.DateTimeField(auto_now_add=True, null=True)
>     discharge_program = models.DateTimeField(auto_now_add=True, null=True)
>     updated_at = models.DateTimeField(auto_now=True)
>     deleted_at = models.DateTimeField(null=True)
>     is_saved = models.NullBooleanField(default=False, null=True, blank
> =True)
>     is_suspended = models.BooleanField(default=False)
>     start_at = models.DateTimeField(null=True)
>     finish_at = models.DateTimeField(null=True)
>
> # utils.py
> from datetime import datetime, time
> import pytz
> from settings.py import TIME_ZONE
> def get_start_at(date):
>     """Obtain the current day initialize in the first second of the day.
>     Parameters:
>         date (date): date object
>
>     Returns:
>         (datetime): YYYY-MM-DD 00:00:00
>     """
>     return datetime.combine(date, time.min, pytz.timezone(TIME_ZONE))
>
>
> Here are my values to create the register:
> {
>     'has_individual_budget': False, 
>     'name': 'plan test create program start_at datetime', 
>     'program_budget': '0', 
>     'uuid4', 'd6effacf-3c19-48db-ab06-5af1d97df599', 
>      'country_list': 
> '[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
>   
>       
> U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]',
>  
>     'method_payment': '7fb39a7e-a6de-488b-9564-9bd853b598ec', 
>     'currency': 'USD', 
>     'is_saved': False, 
>     'start_at': datetime.datetime(2022, 3, 28, 0, 0, tzinfo=<DstTzInfo 
> 'America/Mexico_City' LMT-1 day, 17:23:00 STD>), 
>     'finish_at': datetime.datetime(2022, 4, 27, 23, 59, 59, 999999, 
> tzinfo=<DstTzInfo 'America/Mexico_City' LMT-1 day, 17:23:00 STD>), 
>     'company': <Company: Company object (247)>, 
>     'card_provider': <CardProvider: stripe-usa>, 
>     'payment_provider': <CardProvider: stripe-usa>
> }
>
> as you can see the field 'start_at' is the datetime that I want to store 
> in the database, but when I look the insert query:
> {
>     'sql': """
>          INSERT INTO "user_program" 
>              (
>                  "name", 
>                  "program_budget", 
>                  "company_id", 
>                  "active", 
>                  "uuid4", 
>                  "country_list", 
>                  "method_payment", 
>                  "currency", 
>                  "create_at", 
>                  "discharge_program", 
>                  "updated_at", 
>                  "deleted_at", 
>                  "is_saved", 
>                  "is_suspended", 
>                  "start_at", 
>                  "finish_at", 
>                  "has_individual_budget", 
>                  "card_provider_id", 
>                  "payment_provider_id"
>              ) 
>         VALUES 
>             (
>                 \'plan test create program start_at datetime\', 
>                 \'0\', 
>                 247, 
>                 true, 
>                 \'d6effacf-3c19-48db-ab06-5af1d97df599\', 
>                 
> \'[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
>  
> U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]\',
>  
>                 \'7fb39a7e-a6de-488b-9564-9bd853b598ec\', 
>                 \'USD\', 
>                 \'2022-03-28T18:47:10.865801+00:00\'::timestamptz, 
>                 \'2022-03-28T18:47:10.865870+00:00\'::timestamptz, 
>                 \'2022-03-28T18:47:10.865913+00:00\'::timestamptz, 
>                 NULL, 
>                 false, 
>                 false, 
>                 \'2022-03-28T00:00:00-06:37\'::timestamptz, -- 
> start_field, notice that the timezone part should be -06 but it is -06:37
>                 \'2022-04-27T23:59:59.999999-06:37\'::timestamptz, 
>                 false, 
>                 1, 
>                 1
>             ) 
>         RETURNING "user_program"."id"', 
>     'time': '0.267'
> }
>
>
> Plase tell me how to fix that, if I need to change the TIME_ZONE or 
> something.
>
> Regards, Andres.
>
> El martes, 29 de marzo de 2022 a la(s) 01:41:42 UTC-4, Antonis 
> Christofides escribió:
>
>> Hello,
>>
>>    1. Please copy your code exactly. Is it really 
>>    "pytz.timezone(TIME_ZONE)"? Or is it 
>> "pytz.timezone(*settings.*TIME_ZONE)"? 
>>    If it is the first one, please include the definition or importing of 
>>    TIME_ZONE. 
>>    2. Please pretty-print your dictionary. You can use pprint for that. 
>>    If it doesn't work on OrderedDicts, convert it to a simple dictionary 
>>    before pretty printing. 
>>    3. Likewise, do something so that your SQL statement is more 
>>    readable, such as manually inserting newlines and indents. 
>>
>> Regards,
>>
>> Antonis
>>
>> Antonis Christofides+30-6979924665 <+30%20697%20992%204665> (mobile)
>>
>>
>> On 28/03/2022 22.02, Andrés Alvarez wrote:
>>
>> I need to save some fields in my database in the format YYY-MM-MM 
>> 00:00:00+00. So I decide to do this: 
>> field_to_save = datetime.combine(date_to_save, time.min, 
>> pytz.timezone(TIME_ZONE))
>> in settings.py I have:
>> TIME_ZONE = 'America/Mexico_City'
>> USE_I18N = True
>> USE_L10N = True
>> USE_TZ = True
>>
>> My model:
>> class Program(models.Model):
>>     objects = models.Manager()
>>     objects_custom = ProgramManager()
>>     class Meta:
>>         ordering = ['id']
>>     # ... others fields
>>     start_at = models.DateTimeField(null=True)
>>     finish_at = models.DateTimeField(null=True)
>>
>> Here are my values to create the register:
>> OrderedDict([('has_individual_budget', False), ('name', 'plan test create 
>> program start_at datetime'), ('program_budget', '0'), ('uuid4', 
>> 'd6effacf-3c19-48db-ab06-5af1d97df599'), ('country_list', 
>> '[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
>>  
>> U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]'),
>>  
>> ('method_payment', '7fb39a7e-a6de-488b-9564-9bd853b598ec'), ('currency', 
>> 'USD'), ('is_saved', False), ('start_at', datetime.datetime(2022, 3, 28, 0, 
>> 0, tzinfo=<DstTzInfo 'America/Mexico_City' LMT-1 day, 17:23:00 STD>)), 
>> ('finish_at', datetime.datetime(2022, 4, 27, 23, 59, 59, 999999, 
>> tzinfo=<DstTzInfo 'America/Mexico_City' LMT-1 day, 17:23:00 STD>)), 
>> ('company', <Company: Company object (247)>), ('card_provider', 
>> <CardProvider: stripe-usa>), ('payment_provider', <CardProvider: 
>> stripe-usa>)])
>> as you can see the field 'start_at' is the datetime that I want to store 
>> in the database, but when I look the insert query:
>> {'sql': 'INSERT INTO "user_program" ("name", "program_budget", 
>> "company_id", "active", "uuid4", "country_list", "method_payment", 
>> "currency", "create_at", "discharge_program", "updated_at", "deleted_at", 
>> "is_saved", "is_suspended", "start_at", "finish_at", 
>> "has_individual_budget", "card_provider_id", "payment_provider_id") VALUES 
>> (\'plan test create program start_at datetime\', \'0\', 247, true, 
>> \'d6effacf-3c19-48db-ab06-5af1d97df599\', 
>> \'[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
>>  
>> U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]\',
>>  
>> \'7fb39a7e-a6de-488b-9564-9bd853b598ec\', \'USD\', 
>> \'2022-03-28T18:47:10.865801+00:00\'::timestamptz, 
>> \'2022-03-28T18:47:10.865870+00:00\'::timestamptz, 
>> \'2022-03-28T18:47:10.865913+00:00\'::timestamptz, NULL, false, false, 
>> \'2022-03-28T00:00:00-06:37\'::timestamptz, 
>> \'2022-04-27T23:59:59.999999-06:37\'::timestamptz, false, 1, 1) RETURNING 
>> "user_program"."id"', 'time': '0.267'}
>> the timezone part is -06:37 should be only -06.
>> Plase tell me how to fix that, if I need to change the TIME_ZONE or 
>> something.
>>
>> Regards, Andres.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/1999ec1e-9170-432e-adc0-71cab3dece6an%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/1999ec1e-9170-432e-adc0-71cab3dece6an%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to django-users...@googlegroups.com.
>
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/d1cfcde9-3d21-4918-8edf-b9366b1dfa33n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/django-users/d1cfcde9-3d21-4918-8edf-b9366b1dfa33n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/491602b5-0cca-4267-867f-866abcb05509n%40googlegroups.com.

Reply via email to