在我的时间之前,一些稳定的天才将他们的日期作为字符串写入数据库。不仅如此,格式也各不相同。我至少
05.08.1993
和
31.08.1993 00:00:00
现在我想使用strptime()将它们转换为datetime对象,例如
my_date = datetime.datetime.strptime(my_value, '%d.%m.%y')
所以现在我必须处理不同的格式。我可以想到各种各样的笨拙的方法来实现这一点,包括ifs或trys的丑陋级联。是否有一种优雅的方式来做到这一点?
答案 0 :(得分:3)
我建议您使用 python dateutil
<强>演示:强>
08.05.93
31.08.93
<强>输出:强>
import re
import datetime
a = "05.08.1993"
b = "31.08.1993 00:00:00"
d = re.search("\d{2}.\d{2}.\d{4}", a)
if d:
print(datetime.datetime.strptime(d.group(),'%d.%m.%Y').strftime('%d.%m.%y'))
d = re.search("\d{2}.\d{2}.\d{4}", b)
if d:
print(datetime.datetime.strptime(d.group(),'%d.%m.%Y').strftime('%d.%m.%y'))
使用Regex:
05.08.93
31.08.93
<强>输出:强>
class AutoEncoder(nn.Module):
def __init__(self, inp_size, hid_size):
super(AutoEncoder, self).__init__(
self.lambd = 1.
# Encoder
self.e1 = nn.Linear(inp_size, hid_size)
# Decoder
self.d1 = nn.Linear(hid_size, inp_size)
self.sigmoid = nn.Sigmoid()
pass
def forward(self,x):
encode = self.e1(x)
decode = self.sigmoid(self.d1(encode))
return decode
def loss_function(self, recon_x, x):
l2_loss = nn.MSELoss()
# Here I would like to compute the L1 regularization of the weight parameters
loss = l2_loss(recon_x, x) + self.lambd(l1_loss(self.e1) + l1_loss(self.e2))
return loss
答案 1 :(得分:1)
此模块提供通用日期/时间字符串解析器,能够解析大多数已知格式以表示日期和/或时间。
该模块试图对不太可能的输入格式宽容,即使对于不明确的日期也返回日期时间对象。
答案 2 :(得分:0)
对于您提到的2种数据类型,应该足以利用切片:
extension UILabel {
func setRoundEdge() {
let radius = self.frame.height/2
self.layer.borderWidth = 0.3
self.layer.masksToBounds = false
self.layer.borderColor = UIColor.black.cgColor
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
对于更强大的方法,您可以使用通用日期解析器,如其他答案所述。
答案 3 :(得分:0)
如果只有2种模式,可以使用re
dates = ('05.08.1993', '31.08.1993 00:00:00')
pattern = re.compile(r'\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}:\d{2}')
strp_pattern = '%d.%m.%Y %H:%M:%S'
strp_pattern_fallback = '%d.%m.%Y'
def parse_dates(dates):
for date in dates:
if pattern.match(date):
yield datetime.datetime.strptime(date, strp_pattern)
else:
yield datetime.datetime.strptime(date, strp_pattern_fallback)
list(parse_dates(dates))
[datetime.datetime(1993, 8, 5, 0, 0), datetime.datetime(1993, 8, 31, 0, 0)]