我正在尝试将日期和时间的字符串合并为DateTime格式,以便可以使用两个时间戳的区别。
但是,当将日期作为“ 2019年7月31日”和时间作为“ 5:07 PM”(采用正确的格式,如在toDateTimeFormat方法中看到的)传递给DateTime构造函数时,它给了我意外的日期,即2019- 07-01 17:07:00.000,预计日期应为2019-07-31 17:07:00.000
我也尝试过使用DateTime.utc构造函数,但没有成功,下面是我的代码
import 'package:intl/intl.dart';
void main(){
String dateOne = "31-July-2019";
String timeOne = "5:07PM";
String dateTwo = "01-Aug-2019";
String timeTwo = "12:00AM";
DateTime reminderDate = toDateTimeFormat(dateOne,timeOne);
// 2019-07-01 17:07:00.000 which is wrong..., EXPECTED --> 2019-07-31 17:07:00.000
DateTime dueDate = toDateTimeFormat(dateTwo, timeTwo);
bool value = isValidReminderDate(reminderDate, dueDate);
// REMINDER DATE < DUE DATE SO RETURN TRUE ELSE FALSE...., EXPECTED --> TRUE
print(value);
}
var monthsNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
DateTime toDateTimeFormat(String date, String time){
if(date != null && time != null){
//date: 01-jan-2000 and time: "6:45PM"
List<String> _parts = date.split("-");
List<String> _timeParts =[];
var dt = DateFormat("h:mma").parse(time);
_timeParts = DateFormat('HH:mm').format(dt).split(":");
DateTime dateTime = DateTime(int.parse(_parts[2]),monthsNames.indexOf(_parts[1]),int.parse(_parts[0]), int.parse(_timeParts[0]), int.parse(_timeParts[1]) ,);
// ALSO TRIED WITH DateTime.utc(int.parse(_parts[2]),monthsNames.indexOf(_parts[1]),int.parse(_parts[0]), int.parse(_timeParts[0]), int.parse(_timeParts[1]) ,);
// but of no use...
print("dateTime :: $dateTime");
return dateTime;
}
}
bool isValidReminderDate(DateTime reminderDate, DateTime dueDate){
print('isValidReminderDate :: ${reminderDate.difference(dueDate).isNegative}');
return reminderDate.difference(dueDate).isNegative;
}
答案 0 :(得分:1)
您应该能够直接使用<metro:MetroWindow x:Class="PrismKnxPmpApp.Views.Shell"
xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
>
<Grid x:Name="LayoutRoot" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ToolBarTray DockPanel.Dock="Left" IsLocked="True" Orientation="Vertical" Style="{StaticResource MainToolBarTrayStyle}">
<ToolBar x:Name="NavigationItemsControl" prism:RegionManager.RegionName="MainNavigationRegion" Style="{StaticResource MainToolBarStyle}" >
</ToolBar>
</ToolBarTray>
<ContentControl prism:RegionManager.RegionName="MainContentRegion"
Grid.Column="1" Grid.Row="2" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/>
</Grid>
</Grid>
</metro:MetroWindow>
解析这些字符串(下面有一个警告)。
package:intl
打印 var dateOne = "31-Jul-2019";
var timeOne = "5:07PM";
var dateTwo = "01-Aug-2019";
var timeTwo = "12:00AM";
var format = DateFormat("dd'-'MMM'-'yyyy hh:mma");
var one = format.parse('$dateOne $timeOne');
var two = format.parse('$dateTwo $timeTwo');
print('$one $two ${two.difference(one)}');
需要注意的是,由于您在其他地方使用了3个字母的缩写,因此您必须使用2019-07-31 17:07:00.000 2019-08-01 00:00:00.000 6:53:00.000000
而不是Jul
和July
而不是Sep
。