【问题标题】:Format a string into Date or any other datatype in Django将字符串格式化为 Date 或 Django 中的任何其他数据类型
【发布时间】:2017-11-09 06:51:54
【问题描述】:

我正在使用 Python 3.6 和 Django 1.11。我的后端数据库是 Salesforce。

我正在尝试将用户以字符串形式接受的日期字段保存在 Salesforce 中

str_var = '11/09/2017'

希望它像not_a_str_var = 11/09/2017 一样转换

我尝试了几个日期时间、日期函数,但没有成功。 我也尝试过使用 strptime() 和 strftime() 方法。

我使用 simple-salesforce REST API 从 django 将值传递给 Salesforce。 预期的插入语句是

dataToSFDC = [{'Birthdate': 11/09/2017, 'FirstName': 'testfname', 'LastName': 'testlname', 'Email': 'test@gmail.com','AccountId': '0011F0000043u7fQAA'}]

sf1 = salesforceConnection()

sf2 = sf1.bulk.Contact.insert(dataToSFDC )

请推荐

【问题讨论】:

  • 你能试试不使用批量吗? sf1.Contact.create({'Birthdate': '2000-01-01', 'FirstName': 'testfname', 'LastName': 'testlname', 'Email': 'test@gmail.com','AccountId': '0011F0000043u7fQAA'})
  • @Alexey 单一联系人已成功创建并带有 Birthdate。我的批量联系问题仍然存在
  • 你知道为什么批量插入不支持日期吗?
  • 不幸的是,我还不知道。在这两种情况下 simple-salesforce 在向 API 发送数据之前都使用 json.dumps()
  • 好的,没问题,会想办法解决的。感谢您的帮助!

标签: python django python-3.x date salesforce


【解决方案1】:

根据这个link,应该将日期作为UTC日期时间传递,所以:

import pytz
from datetime import datetime

d = datetime.strptime('11/09/2017', '%m/%d/%Y')
dataToSFDC = [{'Birthdate': pytz.utc.localize(d).isoformat()}]

已编辑:有一个错字:pytz.utc.localize

编辑 2:salesforce dates 描述了日期格式。希望以下内容对您有所帮助。

d = datetime.strptime('11/09/2017', '%m/%d/%Y').strftime('%F %T')
dataToSFDC = [{'Birthdate': d}]

【讨论】:

  • 我尝试了这种方法,但“UTC”对象没有“本地化”属性
  • 使用 pytz.utc.localize 后,数据显示如下 dataToSFDC = [{'Birthdate': datetime.datetime(2017, 8, 19, 0, 0, tzinfo=)] 和抛出的错误是:“日期时间”类型的对象不是 JSON 可序列化的
  • 我的错。对于批量插入,他们需要 json 可序列化对象。日期时间应转换成iso格式:pytz.utc.localize(d).isoformat()
  • 使用 isoformat() 后输出为 dataToSFDC = [{'Birthdate': '2017-11-09T00:00:00+00:00'}] & error is Malformed request cs90.salesforce.com/services/async/38.0/job/7501F0000001wLvQAI/… AI /结果。响应内容:{'exceptionCode': 'InvalidBatch', 'exceptionMessage': '记录未处理'}
  • 抱歉回复晚了。我尝试使用 strftime('%F %T') 的新选项,但仍然出现错误。我认为以下错误是因为,我们将字符串传递给日期 {'Birthdate': '2017-11-04 00:00:00'} 格式错误的请求cs90.salesforce.com/services/async/38.0/job/7501F00000027aOQAQ/…NAQAY/result。响应内容:{'exceptionCode': 'InvalidBatch', 'exceptionMessage': '记录未处理'}
【解决方案2】:

一种快速而肮脏的方法是:

def text_to_date(date_text):
    if not date_text:
        raise ValueError('Empty Date')
    month = int(date_text[0:2])
    day = int(date_text[3:5])
    year = int(date_text[6:10])
    date_time = datetime.date(year,month,day)
    return date_time

【讨论】:

  • 这是幼稚的方法,你也不能将 int 值传递给 datetime.date()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多