iOS正确的dateFormat“可选(1),可选(19),可选(2017)”

时间:2017-01-19 12:57:17

标签: ios swift nsdateformatter

let dateStr1 = "1:19:2017" // Type one
let dateStr2 = "1,19,2017" // Type two
let dateStr3 = "(1)(19)(2017)" // Type three
let dateStr4 = "Optional(1),Optional(19),Optional(2017)"

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "mm:dd:yyyy"
let date1 = dateFormatter.date(from: dateStr1)
// ouput: Jan 19, 2017, 12:01 AM

dateFormatter.dateFormat = "mm,dd,yyyy"
let date2 = dateFormatter.date(from: dateStr2)
// ouput: Jan 19, 2017, 12:01 AM

dateFormatter.dateFormat = "(mm)(dd)(yyyy)"
let date3 = dateFormatter.date(from: dateStr3)
// ouput: Jan 19, 2017, 12:01 AM

dateFormatter.dateFormat = ? // what would be correct formatted string
let date4 = dateFormatter.date(from: dateStr4)
// ouput: nil

现在我的问题是dateStr4的正确日期格式是什么。我知道我可以通过从该字符串中删除Optional子字符串来完成此操作。但我不想这样做。我只是想知道什么是正确的格式化字符串?

3 个答案:

答案 0 :(得分:1)

您正在尝试显示期权的内容。发布您的代码,我们可以帮助您解决问题。

一般来说,你会使用这样的代码:

var dateString: String 
if 
  let month = month,
  let day = day, 
  let year = year {
    dateString = "\(day) Month \(month), \(year)"
  }
  else { 
    dateString = "One of your components is nil"
  }

if let语法称为“可选绑定”。

最好还是使用DateFormatter自动将日期转换为字符串。 DateFormatter个对象会自动处理转换为不同国家/地区的日期格式,并且可能非常复杂。

答案 1 :(得分:0)

清楚地发现日期子字符串是可选项,你可以做的是在连接日期元素时,确保变量被解包。

使用AdView adView = new AdView(this); adView.setAdSize(AdSize.SMART_BANNER); if let {}来解包可选变量。

答案 2 :(得分:0)

正确的dateFormat是:

Glide.with(MainActivity.this)
                .using(new FirebaseImageLoader())
                .load(profilePicture)
                .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
                .into(new GlideDrawableImageViewTarget(profilePictures) {
                    @Override
                    public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) {
                        super.onResourceReady(resource, animation);
                        //try to hide here
                    }

                    @Override
                    public void onLoadFailed(Exception e, Drawable errorDrawable) {
                        super.onLoadFailed(e, errorDrawable);
                        //try to hide here
                    }
                });

输出: public Pair<LatLng, Integer> getCenterWithZoomLevel(LatLng... l) { float max = 0; if (l == null || l.length == 0) { return null; } LatLngBounds.Builder b = new LatLngBounds.Builder(); for (int count = 0; count < l.length; count++) { if (l[count] == null) { continue; } b.include(l[count]); } LatLng center = b.build().getCenter(); float distance = 0; for (int count = 0; count < l.length; count++) { if (l[count] == null) { continue; } distance = distance(center, l[count]); if (distance > max) { max = distance; } } double scale = max / 1000; int zoom = ((int) (16 - Math.log(scale) / Math.log(2))); return new Pair<LatLng, Integer>(center, zoom); }